3

こんにちはnilオブジェクトを表すNSDatePickerを持つことは可能ですか?-/-/-または他の方法のようなもの。

ありがとう、ラドゥ

4

3 に答える 3

5

簡単な答え:いいえ

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];

}
于 2011-04-17T00:43:14.213 に答える
1

次のNSDatePickerサブクラスは、空の日付状態を表示でき、nilバインディングを表します。

https://github.com/ThesaurusSoftware/TFDatePicker

TFDatePickerTestを実行して、動作を確認します。

于 2014-05-19T11:44:52.343 に答える
0

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()
    }
}
于 2016-11-08T15:53:32.703 に答える