Joe*_*out 27 uidatepicker ios uicontrolevents
我遇到了一个奇怪的效果,肯定看起来像iOS7中的一个错误 - 但是在过去,当我以为我发现Apple的API中有一个错误时,它已经证明是我自己的误解.
我有一个带有datePickerMode = UIDatePickerModeCountDownTimer和minuteInterval = 5的UIDatePicker.我将持续时间初始化为1小时,并将其呈现给用户,它显示为具有小时和分钟的双列选择器.(到现在为止还挺好.)
用户正在考虑"20分钟",因此将小时列滚动到0.此时选择器读取0小时0分钟,而iOS7并不酷,因此它会自动将分钟轮滚动到5.我的UIControlEventValueChanged处理程序被调用,countDownDuration读取5分钟.(还好.)
现在,用户抓住分钟轮并将其拖动到20.并且...我的UIControlEventValueChanged处理程序不会被调用.(坏.)
如果我在UI中有其他事件检查此时的日期选择器,我确实看到countDownDuration设置为20.但我无法知道用户在更改时已经更改了它.这是非常可重复的:它始终发生在拾取器拒绝设置为0之后的第一次更改(将自身推进到5分钟).
请注意,这是在iOS7中; 它不会出现在iOS6中(也许是因为选择器有完美的内容设置为0分钟).
所以......我在这里错过了一些东西吗?或者这是iOS7中的真正错误?而在后一种情况下,是否有人知道解决方案比定时检查当前间隔更好?
Pos*_*ron 33
我还可以确认iOS 7.0.3 UIDatePicker在UIDatePickerModeCountDownTimer模式下使用时会出现错误.第一次用户通过滚动滚轮更改值时,拾取器不会触发与UIControlEventValueChanged事件关联的目标操作.它适用于后续更改.
以下是一种有效的解决方法.只需将调度块中countDownDuration的初始值设置为主循环的代码.每次将车轮旋转到新值时,您的目标操作方法都会触发.这种方法几乎没有开销,在iPhone 4和iPad 4上运行良好.
dispatch_async(dispatch_get_main_queue(), ^{
self.myDatePicker.countDownDuration = (NSTimeInterval) aNewDuration ;
});
Run Code Online (Sandbox Code Playgroud)
我仍然在7.1中遇到这个问题但是将以下内容添加到UIControlEventValueChanged处理程序中为我修复了它.
// Value Changed Event is not firing if minimum value hit
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self.myDatePicker setCountDownDuration: self.myDatePicker.countDownDuration];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4081 次 |
| 最近记录: |