目标C:UIDatePicker UIControlEventValueChanged仅在第二次select时触发
第一次使用UIDatePickers。 首先,我只是试图用datePicker(在倒计数模式下设置)中select的任何值来更新文本字段。
它的工作,但只有第二次,用户select一个时间。 我的行动,durationSelected()只是第二次调用,所以更新textField没有问题。
以下是我在故事板中configurationdateselect器的方法:
以下是Value Changed引发的操作:
从DetailViewController.m
- (IBAction)durationSelected:(UIDatePicker *)sender { self.durationTextField.text = [NSString stringWithFormat:@"%f seconds", sender.countDownDuration]; }
我已经尝试设置一个默认值,这没有任何作用。
任何关于发生了什么的想法?
谢谢!
这似乎是UIDatePicker的iOS 7实施中的一个错误。 我build议提交一个雷达。
在iOS 6 SDK上构build并在iOS 6设备上运行将会工作,而在iOS 7设备上运行则不会。
您可以通过将这行代码添加到- (void)viewDidLoad
方法来修复它
[self.datePicker setDate:[NSDate date] animated:YES];
在UIDatePickerModeCountDownTimer模式下使用时,我看到了与iOS 7.0.3 UIDatePicker类似的错误。 当用户第一次通过滚动轮子来改变值时,select器不会触发与UIControlEventValueChanged事件相关联的目标动作。 它适用于后续更改。
以下是一个有效的解决方法。 只需将将调度块中countDownDuration的初始值设置为主循环的代码即可。 每次将车轮旋转到新的值时,您的目标行动方法都会启动。 这种方法几乎没有开销,在iPhone 4和iPad 4上运行得非常好。
dispatch_async(dispatch_get_main_queue(), ^{ self.myDatePicker.countDownDuration = (NSTimeInterval) aNewDuration ; });
我不确定,这是一个有教养的猜测:
可能iOS只在跟踪date选取器的值更改时,才会由animation轮引起。 所以它会在您的第一个“滚动”上设置值,但只能检测到第二个已经改变的值。
正如我所说,我不能确定的原因,但修复应该是简单的:只需设置凝视date以编程方式在视图加载后使用setDate: animated:
::
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self.picker setDate:[NSDate dateWithTimeIntervalSinceNow:0] animated:true ]; }
这似乎是为我工作。
你可以尝试设置countDownTimer的值(如果你正在使用datepicker在倒计时器模式)。 但是请确保在提交select器后在完成块内设置此属性。