空NSDatePicker

时间:2011-03-30 14:10:45

标签: objective-c nsdate nsdatepicker

您好 是否可以使用NSDatePicker表示nil对象?像 - / - / - 或任何其他方式。

谢谢, 拉杜

3 个答案:

答案 0 :(得分:5)

简答:否

NSDatePicker只是忽略了无效日期而没有。
例如,这不会更新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];

}

答案 1 :(得分:1)

以下NSDatePicker子类可以显示空日期状态,并表示nil绑定。

https://github.com/ThesaurusSoftware/TFDatePicker

运行TFDatePickerTest以查看其行为。

答案 2 :(得分: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()
    }
}