2011-03-30 13 views
3

こんにちは nilオブジェクトを表すNSDatePickerを使用できますか? -/-/- または他の方法のようなもの。空NSDatePicker

おかげで、 ラドゥ

答えて

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

} 
+0

ありがとうございました。そうするだろう –

1

次NSDatePickerサブクラスは空の日付を表示することができます状態を保持し、そのようなバインディングなしを表します。

https://github.com/ThesaurusSoftware/TFDatePicker

、それがどのように動作するかを確認するためにTFDatePickerTestを実行します。

0

あなたは0にNSDatePickerElementFlagsを設定することで、何の日付を表示しないようにNSDatePickerを強制することができます。

@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() 
    } 
}