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

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

谢谢, 拉度

【问题讨论】:

    标签: objective-c nsdate nsdatepicker


    【解决方案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()
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多