2012-08-08 11 views
32

UIDatePickerで変更を監視する代理人がいないことに気づきました。ピッカーで何かを確認せずに変更が行われたことを検出する方法はありますか?それが回転して新しい番号に着陸する瞬間など、それを検出できるようにしたいのですが。私が観察したキー値を考えたが、私はあなたが日付の変更を処理するために、あなたのUIDatePickerにUIControlEventValueChangedイベントを追加する必要があるスポットUIDatePickerの変更を観察する

答えて

38

IBに移動し、UIDatePickerから.hファイルにドラッグします。次に、enter image description here

を選択してください。これは.mファイルには必要ですが、 XCodeはあなたのために以下のメソッドを追加します。ここで

enter image description here

+0

もちろん、私が考えていない最も簡単な解決策です。ありがとう – Chris

55

に変わる性質がないと思う。そして、

[myDatePicker addTarget:self action:@selector(dateIsChanged:) forControlEvents:UIControlEventValueChanged]; 

実装:

- (void)dateIsChanged:(id)sender{ 
    NSLog(@"Date changed"); 
} 
+1

良い答え、私はこのプログラムによるもののための怠け者です。これを行うには、日付ピッカーへの参照が必要です(IBで作成した場合は、簡単に追加することはできますが)。 – Dustin

+1

スウィフトバージョン: 'picker.addTarget(自己、アクション:#selector(dateChanged)、forControlEvents:.ValueChanged)dateChanged(送信者:UIDatePicker)FUNC @objc {印刷(sender.date.description) }' –

2

はKVO準拠の日付ピッカーのための提案である:

@interface LNKVODatePicker : UIDatePicker 

@end 

@implementation LNKVODatePicker 

- (void)willMoveToWindow:(UIWindow *)newWindow 
{ 
    [super willMoveToWindow:newWindow]; 

    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 

    if(newWindow != nil) 
    { 
     [self addTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
    } 
} 

- (void)dealloc 
{ 
    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
} 

- (void)_didChangeDate 
{ 
    [self willChangeValueForKey:@"date"]; 
    [self didChangeValueForKey:@"date"]; 
} 

@end 
関連する問題