пустой NSDatePicker - PullRequest
       21

пустой NSDatePicker

3 голосов
/ 30 марта 2011

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

Спасибо, Раду

Ответы [ 3 ]

5 голосов
/ 17 апреля 2011

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

NSDatePicker просто игнорирует недопустимые даты и nil.
Например, это не обновляет 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];

}
1 голос
/ 19 мая 2014

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

https://github.com/ThesaurusSoftware/TFDatePicker

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

0 голосов
/ 08 ноября 2016

Вы можете заставить 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()
    }
}
...