Пустой NSDatePicker

Привет Возможно ли иметь NSDatePicker, представляющий объект nil? Что-то вроде -/-/- или любым другим способом.

Спасибо раду

3 ответа

Решение

Краткий ответ: нет

NSDatePicker просто игнорирует недействительные даты и ноль.
Например, это не обновляет NSDatePicker, старое значение остается:

[datePicker setDateValue: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];

}

Следующий подкласс NSDatePicker может показывать пустое состояние даты и представляет нулевую привязку как таковую.

https://github.com/ThesaurusSoftware/TFDatePicker

Запустите TFDatePickerTest, чтобы увидеть, как он себя ведет.

Вы можете заставить NSDatePicker не показывать дату, установив для NSDatePickerElementFlags значение 0:

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

Тем не менее, вы должны обработать отображение даты, когда выбран 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()
    }
}
Другие вопросы по тегам