Я делаю журнальное приложение, в котором пользователь может редактировать метку даты и времени. Когда пользователь нажимает на ярлык, он вызывает UIDatePicker. Я хочу сделать так, чтобы при сохранении даты, а также для «сегодня», ярлык не обновлялся для отображения сегодняшней даты, а вместо этого отображал слово «сегодня». Это то, что я видел в Календаре, Журнале, Фитнесе и любом другом приложении, которое позволяет пользователю редактировать дату записи в журнале.
Правильно отображается, когда пользователь первоначально открывает представление и видит текущую дату и время (программный c пользовательский интерфейс):
let dateTimePicker: UIDatePicker = {
let picker = UIDatePicker()
picker.datePickerMode = .dateAndTime
picker.timeZone = NSTimeZone.local
picker.backgroundColor = UIColor.white
return picker
}()
let dateTimeLabel: UILabel = {
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.setLocalizedDateFormatFromTemplate("h:mm")
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.attributedText = NSAttributedString(string: "Today, " + dateFormatter.string(from: now), attributes:[.underlineStyle: NSUnderlineStyle.single.rawValue])
return label
}()
Средство выбора даты открывается как всплывающее окно. Когда пользователь нажимает кнопку «Отмена», дата и время остаются неизменными. Когда пользователь изменяет дату и / или время и нажимает «Сохранить», dateTimeLabel
обновляется соответствующим образом. Однако, если отображается «Сегодня, ___» и пользователь нажимает «Сохранить», ярлык обновляет его до текущей даты.
Вот что я пробовал:
@objc func saveTapped() {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
let now = Date()
if dateTimePicker.date == now {
dateFormatter.setLocalizedDateFormatFromTemplate("h:mm")
dateTimeLabel.text = "Today, " + dateFormatter.string(from: now)
} else {
dateFormatter.setLocalizedDateFormatFromTemplate("MMMd h:mm")
dateTimeLabel.text = dateFormatter.string(from: dateTimePicker.date)
}
removePopoverView()
}
Gif, чтобы показать, что он в данный момент делает (я хочу, чтобы он отображал «Сегодня» вместо «17 апреля» на dateTimeLabel
, когда пользователь нажимает «Сохранить» https://makeagif.com/i/v9mrKs