空 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的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )