空 NSDatePicker

Posted

技术标签:

【中文标题】空 NSDatePicker【英文标题】:empty NSDatePicker 【发布时间】:2011-03-30 14:10:45 【问题描述】:

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

谢谢, 拉度

【问题讨论】:

【参考方案1】:

简短回答:否

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];


【讨论】:

【参考方案2】:

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

https://github.com/ThesaurusSoftware/TFDatePicker

运行 TFDatePickerTest 以查看它的行为。

【讨论】:

【参考方案3】:

您可以通过将 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()
    

【讨论】:

以上是关于空 NSDatePicker的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp5 的空操作 空控制器 空模块

java中的空指针异常怎么解决

Kotlin空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )

Kotlin空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )

ThinkPHP - 空模块+空操作

空操作和空控制器