用户选择日期后无法显示“今天”,而不是今天的日期

问题描述 投票:0回答:1

我正在制作日记应用,用户可以在其中编辑日期时间标签。当用户点击标签时,它会弹出一个UIDatePicker。我要这样做,以便当他们保存日期时,如果它是用于“今天”,那么标签将不会更新以显示今天的日期,而是显示“今天”一词。这是我在“日历”,“日记”,“健身”以及任何其他可让用户编辑输入日志日期的应用程序中看到的内容。

当用户最初打开视图并看到当前日期和时间(程序化UI)时,它会正确显示:

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显示当前正在做什么(我希望它在用户单击“保存” dateTimeLabel时在https://makeagif.com/i/v9mrKs上显示“今天”而不是“ 4月17日”

ios swift uidatepicker
1个回答
0
投票

这里如何检查2日期是否是同一天

func isSameDay(date1: Date, date2: Date) -> Bool {
    let diff = Calendar.current.dateComponents([.day], from: date1, to: date2)
    if diff.day == 0 {
        return true
    } else {
        return false
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.