观察UIDatePicker中的变化
我注意到没有委托来观察UIDatePicker中的更改。有没有一种方法可以检测出选取器中发生变化而未确认任何内容,例如旋转的时刻以及我希望能够检测到的新数字。我想到了键值观察,但我不认为有这么当场观察UIDatePicker中的变化
转到IB并从UIDatePicker
拖到您的.h文件。然后选择
无论你想在你的.m文件中如何处理, XCode会为您添加以下方法。
您需要添加到您的UIDatePicker的UIControlEventValueChanged
事件来处理日期的变化而变化的特性:
[myDatePicker addTarget:self action:@selector(dateIsChanged:) forControlEvents:UIControlEventValueChanged];
然后实施:
- (void)dateIsChanged:(id)sender{
NSLog(@"Date changed");
}
很好的回答,我这个纲领性的东西太懒惰。请注意,您需要引用日期选择器才能执行此操作,如果您在IB中创建它(尽管您可以轻松添加它),则不一定具有此功能。 – Dustin 2012-08-08 14:43:20
夫特版本: 'picker.addTarget(个体,动作:#selector(dateChanged),forControlEvents:.ValueChanged) @objc FUNC dateChanged(发件人:的UIDatePicker){ 打印(sender.date.description) }' – 2016-03-29 18:51:58
下面是一个兼容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
当然,它是我没有考虑过的最简单的解决方案。谢啦 – Chris 2012-08-08 14:42:37