Пустой 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()
}
}