В настоящее время я использую приложение, в котором есть функция, позволяющая пользователям добавлять расписание (время)
Вот прогресс, которого я добился на данный момент
1. Добавлен текстовый просмотр и datepicker и включен datepicker после нажатия textView
.
2. Время (время запуска проекта) отображается в каждой ячейке (как прикрепленное изображение)
Я хочу отображать дату (например, 22:10 на коротком экране) в ячейке после выбора времени в datepicker, но не могу обновить выбранное время.
Есть идеи, как это сделать?
Заранее спасибо.
TimeSelectorViewController:
import UIKit
class TimeSelectorController: UICollectionViewController,
UICollectionViewDelegateFlowLayout, UITextViewDelegate {
let cellId = "cellId"
let timeSelectorCell = TimeSelectorCell()
override func viewDidLoad() {
super.viewDidLoad()
collectionView.backgroundColor = .yellow
collectionView.reloadData()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "V", style: .plain, target: self, action: #selector(handleBack))
collectionView.register(TimeSelectorCell.self, forCellWithReuseIdentifier: cellId)
}
@objc fileprivate func handleBack() {
dismiss(animated: true, completion: nil)
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TimeSelectorCell
cell.textView.inputView = timeSelectorCell.timePicker
cell.textView.text = timeSelectorCell.handleSelectedTime()
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 50)
}
}
TableSelectorCell:
import UIKit
class TimeSelectorCell: UICollectionViewCell {
let textView: UITextView = {
let tv = UITextView()
tv.text = "Time Goes Here"
tv.isEditable = false
return tv
}()
lazy var timePicker: UIDatePicker = {
let picker = UIDatePicker()
picker.datePickerMode = .time
picker.minuteInterval = 10
//picker.minuteInterval = 30
picker.addTarget(self, action: #selector(handleSelectedTime), for: .valueChanged)
return picker
}()
@objc func handleSelectedTime() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
let selectTime = dateFormatter.string(from: timePicker.date)
textView.inputView = timePicker
textView.text = selectTime
print(selectTime)
return selectTime
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(textView)
textView.anchor(top: topAnchor, left: leftAnchor, bottom: bottomAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, height: 0, width: 0)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}





Ваш dateFormat будет следить за временем в 12-часовом формате.
dateFormatter.dateFormat = "h:mm a"
@akaak для этого вам нужно сохранить выбранное время в массиве и передать этот массив в вашу коллекцию. при выборе времени для другой ячейки вам необходимо обновить это время в своем массиве и перезагрузить представление коллекции.
@akaak что теперь происходит при изменении значения? ничего такого? Вызывается ли ваш метод handleSelectedTime?
Метод @RakeshaShastri handleSelectedTime действительно вызывается. Проблема в том, что я не могу обновить отображаемое время. TextView «20:17» в пяти ячейках - это время, когда я запускал проект. Я попробую то, что предложил Никундж
@akaak, вы хотите, чтобы время поразило все 5 ячеек? Это в настоящее время отражается на одной ячейке, правильно?
@RakeshaShastri сейчас ни одна из ячеек не отображается. На самом деле, я хочу отображать разное время в каждой ячейке.
Привет, Никунджи, спасибо за ответ! формат изменился, но время не обновилось. Я имею в виду, что я хочу отображать время (22:10 вечера) в ячейке после выбора времени.