使用开关更改pickerview的值

时间:2014-01-23 11:56:38

标签: ios uipickerview uiswitch

我有几个选择器视图和一个开关。我想做的是每次切换按钮时更改选择器的值。为简单起见,假设我想在开关打开时选择每个拾取器的第二行,并在开关关闭时选择每个拾取器的第十行。根据我在过去几个小时收集到的内容,实现此目的的方法如下:

// 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方法调用它时调用它。

有什么想法吗?

4 个答案:

答案 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)