Question

I have a couple of picker views and a switch. What I would like to do is change the values of the pickers every time the button is toggled. For simplicity, let's say that I want to select the second row of each picker when the switch is on, and select the tenth row of each picker when the switch is off. From what i gathered in the past couple of hours, the way to do this is as follows:

// 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];    
  }
}

This doesn't seem to working, though. I also noticed that the selectRow:inComponent method doesn't change the value of the picker unless it is called when the view is being drawn/redrawn, or when it's being called from the didSelectRow:inComponent method.

Any ideas?

Was it helpful?

Solution

SelectRow: inComponent: animated: has always worked to move the picker for me, and I've done stuff like this plenty. The thing that used to catch me out is that will trigger pickerview: didSelectRow: inComponent: on the delegate, which I generally only want called when the setting has come from the user, not from my own code. The way to work around this is either

picker.delegate = nil;
[picker selectRow:foo inComponent:bar animated:probably];
picker.delegate = thatObjectWhichWasDelegateAsecondAgo;

Or have a bool ivar you cans set to no briefly eg listenToPicker, then inside didselectrow..

-(void)pickerview:pickerview didSelectRow:row inComponent:component{

if (listenToPicker){

///act on input


}}

OTHER TIPS

reloadAllComponents
reloadComponent:

these two methods are available for reloading the UIPickerview

make the changes to the datasource datatypes and call a reload then on the event on switch

it should work.I have used the same method, it's working for me. The problem might be some where else..

This has changed in ios9. It works if you use:

        picker.selectRow(rowNum, inComponent: componentNum, animated: true)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top