目标C:UIDatePicker UIControlEventValueChanged仅在第二次选择时触发

cor*_*bin 25 objective-c uidatepicker ios

第一次使用UIDatePickers.首先,我只是尝试使用从datePicker中选择的任何值更新文本字段(在倒计时模式下设置).

它可以工作,但只是用户第二次选择时间.我的动作,durationSelected()仅被第二次调用,因此更新textField没有问题.

以下是我在故事板中配置日期选择器的方法:

在此输入图像描述

在此输入图像描述

以下是Value Changed触发的操作:

来自DetailViewController.m

- (IBAction)durationSelected:(UIDatePicker *)sender
{
    self.durationTextField.text = [NSString stringWithFormat:@"%f seconds", sender.countDownDuration];
}
Run Code Online (Sandbox Code Playgroud)

我试过设置一个默认值,没有效果.

关于发生了什么的任何想法?

谢谢!

Pos*_*ron 22

在UIDatePickerModeCountDownTimer模式下使用iOS 7.0.3 UIDatePicker时,我看到了类似的错误.一次用户通过滚动滚轮更改值时,拾取器不会触发与UIControlEventValueChanged事件关联的目标操作.它适用于后续更改.

以下是一种有效的解决方法.只需将调度块中countDownDuration的初始值设置为主循环的代码.每次将车轮旋转到新值时,您的目标操作方法都会触发.这种方法几乎没有开销,在iPhone 4和iPad 4上运行良好.

dispatch_async(dispatch_get_main_queue(), ^{
    self.myDatePicker.countDownDuration = (NSTimeInterval) aNewDuration ;
});
Run Code Online (Sandbox Code Playgroud)

  • 在 iOS 11.2 模拟器中对我不起作用;我通过添加延迟来修复它:`DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(1)) { picker.countDownDuration = duration }` 希望这对某人有所帮助。 (2认同)

小智 16

这似乎是UIDatePicker的iOS 7实现中的一个错误.我建议在上面放一个雷达.

在iOS 6 SDK上构建并在iOS 6设备上运行将起作用,而在iOS 7设备上运行则不行.

您可以通过在- (void)viewDidLoad方法中添加此行代码来修复它

[self.datePicker setDate:[NSDate date] animated:YES];
Run Code Online (Sandbox Code Playgroud)