3

嗨,是否可以有一个 NSDatePicker 代表一个 nil 对象?像 -/-/- 或任何其他方式。

谢谢,拉杜

4

3 回答 3

5

简短的回答:没有

NSDatePicker 只是忽略无效日期和 nil。
例如,这不会更新 NSDatePicker,旧值仍然存在:

[datePicker setDateValue:nil];

唯一的解决方案:检测 nil 并做一些具体的事情:

if(date == nil) {

    // Set Specific Date
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyyMMdd"];
    NSDate *nilDate = [dateFormat dateFromString:@"20000101"];  
    [datePicker setDateValue:nilDate];

    // Or Disable
    [datePicker setEnabled:FALSE];

} else {

    // Update Date
    [datePicker setDateValue:date];

}
于 2011-04-17T00:43:14.213 回答
1

下面的 NSDatePicker 子类可以显示一个空的日期状态并表示一个 nil 绑定。

https://github.com/ThesaurusSoftware/TFDatePicker

运行 TFDatePickerTest 以查看其行为方式。

于 2014-05-19T11:44:52.343 回答
0

您可以通过将 NSDatePickerElementFlags 设置为 0 来强制 NSDatePicker 不显示日期:

@IBOutlet weak var datePicker: NSDatePicker!
datePicker.datePickerElements = NSDatePickerElementFlags(rawValue: 0)

但是,您必须在选择 datePicker 时处理显示日期。这是一个执行此操作的子类,显示了选择空datepicker的当前日期:

class MyDatePicker: NSDatePicker {

    var date: Date? {
        didSet {
            if let date = date {
                self.dateValue = date
                self.datePickerElements = .yearMonthDayDatePickerElementFlag
            } else {
                self.datePickerElements = NSDatePickerElementFlags(rawValue: 0)
            }
        }
    }

    override func becomeFirstResponder() -> Bool {
        if date == nil {
            date = Date()
        }
        return true
    }

    override func resignFirstResponder() -> Bool {
        editing = false
        date = self.dateValue
        return super.resignFirstResponder()
    }
}
于 2016-11-08T15:53:32.703 回答