我有一个包含多个组件的UIPickerView
。有些值显示为灰色,我的pickerView:didSelectRow:inComponent
通过将有问题的选择器组件移动到最接近的有效值来表达这一点,就像当您选择“二月”时UIDatePicker
从“30”移动到“28”一样。然后它调用委托方法来宣布调整后的值。
当我的调整器方法调用UIPickerView
的{{1}}时,屏幕上的值是正确的,但selectRow:inComponent:animated:YES
的值是陈旧的(从调整灰度值之前)。但是,如果我调用selectedRowInComponent:
,返回的值是正确的,但缺少动画是不和谐的。
我已尝试将调整包装在selectRow:inComponent:animated:NO
/ beginAnimations:
块中并捕获commitAnimations
的{{1}}中的值,但我仍然会收到过时的值。有没有人遇到过这个?
问题很容易复制。
UIView
如果你有动画它的YES,那么retValue就是0(你称之为陈旧)。更改为NO,retValue将与newValue相同。
答案 0 :(得分:1)
我没有注意到这一点,但是一个简单的黑客可能是执行动画操作,然后一旦动画完成,只需在没有动画的情况下再次执行它。那么selectedRowInComponent
的结果应该是正确的。
但是,从您的测试代码中可以看出它返回了正确的结果。如果您要求选择器选择动画行,则在动画完成之前不会设置新值,因此如果您在刚开始动画后立即要求选择的行(无论如何直到下一个runloop都不会启动),那么你将得到旧的结果。
无论如何,你究竟如何捕捉到动画的结尾,你能展示你使用过的代码吗?
另一个问题是,为什么你需要立即纠正?如果您明确设置了选择器,那么您已经确切地知道正在设置什么值,那么为什么还要再次询问它?