2012-08-08 157 views
32

我注意到沒有委託來觀察UIDatePicker中的更改。有沒有一種方法可以檢測出選取器中發生變化而未確認任何內容,例如旋轉的時刻以及我希望能夠檢測到的新數字。我想到了鍵值觀察,但我不認爲有這麼當場觀察UIDatePicker中的變化

回答

38

轉到IB並從UIDatePicker拖到您的.h文件。然後選擇enter image description here

無論你想在你的.m文件中如何處理, XCode會爲您添加以下方法。

enter image description here

+0

當然,它是我沒有考慮過的最簡單的解決方案。謝啦 – Chris 2012-08-08 14:42:37

55

您需要添加到您的UIDatePicker的UIControlEventValueChanged事件來處理日期的變化而變化的特性:

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

然後實施:

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

很好的回答,我這個綱領性的東西太懶惰。請注意,您需要引用日期選擇器才能執行此操作,如果您在IB中創建它(儘管您可以輕鬆添加它),則不一定具有此功能。 – Dustin 2012-08-08 14:43:20

+1

夫特版本: 'picker.addTarget(個體,動作:#selector(dateChanged),forControlEvents:.ValueChanged) @objc FUNC dateChanged(發件人:的UIDatePicker){ 打印(sender.date.description) }' – 2016-03-29 18:51:58

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