[M / d,使用DateFormatter的当前年份格式

问题描述 投票:-2回答:1

i具有一个用dateformater绑定到日期的文本字段,dateformat属性设置为“ M / d”。当我在文本字段中输入类似3/1的字符串时,它将返回3/1/2000。我如何将其默认设置为当前年份,而不必在字符串中键入年份。

swift
1个回答
0
投票

您可以使用当年的年初设置日期格式器的defaultDate:

创建您的自定义日期格式]

extension Formatter {
    static let monthDay: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = .init(identifier: "en_US_POSIX")
        dateFormatter.dateFormat = "M/d"
        return dateFormatter
    }()
}

然后为您的textField添加了一个用于控制事件编辑的目标:

textField.addTarget(self, action: #selector(editingChanged), for: .editingChanged)

[创建一个方法来检查textField值每次更改是否可以由您的日期格式化程序解析用户键入的文本。将当前年份的开始设置为dateFormatter的defaultDate:

 @objc func editingChanged(_ textField: UITextField) {
    let year = Calendar.current.component(.year, from: Date())
    let defaultDate = DateComponents(calendar: .current, year: year).date!
    Formatter.monthDay.defaultDate = defaultDate
    if let date = Formatter.monthDay.date(from: textField.text!) {
        print(date.description(with: .current))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.