UIPickerView selectedRowInComponent:在代码调整后返回过时数据

时间:2009-07-10 05:04:26

标签: uipickerview

我有一个包含多个组件的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相同。

1 个答案:

答案 0 :(得分:1)

我没有注意到这一点,但是一个简单的黑客可能是执行动画操作,然后一旦动画完成,只需在没有动画的情况下再次执行它。那么selectedRowInComponent的结果应该是正确的。

但是,从您的测试代码中可以看出它返回了正确的结果。如果您要求选择器选择动画行,则在动画完成之前不会设置新值,因此如果您在刚开始动画后立即要求选择的行(无论如何直到下一个runloop都不会启动),那么你将得到旧的结果。

无论如何,你究竟如何捕捉到动​​画的结尾,你能展示你使用过的代码吗?

另一个问题是,为什么你需要立即纠正?如果您明确设置了选择器,那么您已经确切地知道正在设置什么值,那么为什么还要再次询问它?