2012-08-08 90 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