我有几个选择器视图和一个开关。我想做的是每次切换按钮时更改选择器的值。为简单起见,假设我想在开关打开时选择每个拾取器的第二行,并在开关关闭时选择每个拾取器的第十行。根据我在过去几个小时收集到的内容,实现此目的的方法如下:
// action called when the switch is toggled
- (void) switchToggled:(id)sender {
if ([sender isOn]) {
[picker1 selectRow:2 inComponent:0 animated:YES];
[picker2 selectRow:2 inComponent:0 animated:YES];
}
else {
[picker1 selectRow:10 inComponent:0 animated:YES];
[picker2 selectRow:10 inComponent:0 animated:YES];
}
}
但这似乎不起作用。我还注意到selectRow:inComponent
方法不会更改选择器的值,除非在绘制/重绘视图时调用它,或者从didSelectRow:inComponent
方法调用它时调用它。
有什么想法吗?
答案 0 :(得分:1)
SelectRow:inComponent:animated:总是能为我移动选择器,我已经做了很多这样的事情。过去常常让我感到困惑的是触发pickerview:didSelectRow:inComponent:on delegate,我通常只想在设置来自用户时调用,而不是来自我自己的代码。解决这个问题的方法是
picker.delegate = nil;
[picker selectRow:foo inComponent:bar animated:probably];
picker.delegate = thatObjectWhichWasDelegateAsecondAgo;
或者有一个bool ivar你可以设置为没有简单的例如listenToPicker,然后在didselectrow内..
-(void)pickerview:pickerview didSelectRow:row inComponent:component{
if (listenToPicker){
///act on input
}}
答案 1 :(得分:0)
reloadAllComponents
reloadComponent:
这两种方法可用于重新加载UIPickerview
对数据源数据类型进行更改,然后在交换机上的事件上调用重新加载
答案 2 :(得分:0)
它应该工作。我使用了相同的方法,它对我有用。问题可能是其他地方..
答案 3 :(得分:0)
这在ios9中有所改变。如果你使用它,它可以工作:
picker.selectRow(rowNum, inComponent: componentNum, animated: true)