How to change the picker rows based on another picker's selection?

2.4k views Asked by At

I have two pickers - country and region. I need to populate the region picker based on the row selected in the country picker. I have arrays to populate both the pickers. I need some help to change the rows of region picker based on the country picker's selection. Any help would be greatly appreciated. Thanks a lot in advance.

4

There are 4 answers

1
Krrish On BEST ANSWER

Ok You have two pickers lets say countryPicker and regionPicker.

in the delegate method for UIPickerView add one condition

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{ 
    NSString *pickerTitle = @"";
    if (pickerView == countryPicker)
    {
        pickerTitle =  [countryFeeds objectAtindex:row];
        //assigns the country title if pickerView is countryPicker
    }
    else if (pickerView == regionPicker)
    {
        pickerTitle =  [regionFeeds objectAtindex:row];
        //assigns the region title if pickerView is regionPicker
    }

    return pickerTitle;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (pickerView == countryPicker)
    {
        //selects the region corresponding to the selected country.
        //totalRegions is a NSDictionary having country names as keys and array of their regions as values
        regionFeeds = [totalRegions objectForKey:[countryFeeds objectAtindex:row]];

        //Now reloading the regionPicker with new values.
        [regionPicker reloadAllComponents];
    }
    else if (pickerView == regionPicker)
    {
        // your code to select a region
    }
}

I hope this solves your problem :)
BR, Hari

1
user1157838 On

My suggestion is please maintain the country and region in one picker with two components(country,region).If u do like this then we can change the one component values based on another component value.

1
Nick Lockwood On

Are they separate picker views, or one picker view with two columns?

Either way, when you change the value in one picker, just call reloadAllComponents on the other picker (or reloadComponent: if you are using a split picker) and then when it reloads the data from it's data source you can use the value from the first picker to supply the correct region list.

0
Shubhank On
  NSUInteger selectedRow= [CountryPicker selectedRowInComponent:0];

    NSString *userchoice =[self pickerView:CountryPicker titleForRow:selectedRow forComponent:0];

This will give you the title for the selected row by the user in country picker

then using the arrays you have to populate names of regions You can use

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated

on the RegionPicker