Search code examples
iosobjective-cuipickerviewdidselectrowatindexpath

how to Show Value in a SecondPickerView based on FirstPickerView Selected Value?


I have 2 picker views: statePicker and providerPicker. I have populated the values of arrays for both picker views (stateNames for statePicker, providerNames for providerPicker).

My problem is, I have to show a value in providerPicker based on statePicker's selected value. For example, if i select Tamilnadu in statePicker means that providerPicker automatically should show TNEB. Similarly, KSEB for Karnataka.

This is my code:

DetailDeviceViewController.h

#import <UIKit/UIKit.h>

@interface DeviceDetailViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>

@property(strong,nonatomic) UIPickerView *statePicker;
@property(strong,nonatomic) UIPickerView *providerPicker;
@property (strong, nonatomic) NSArray *stateNames;
@property (strong, nonatomic) NSArray *providerNames;

@end

DetailDeviceViewController.m

#import "DeviceDetailViewController.h"

@interface DeviceDetailViewController ()
@end

@implementation DeviceDetailViewController 
@synthesize stateNames,providerNames,statePicker,providerPicker;

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Array declaration
    stateNames = [[NSArray alloc]initWithObjects:@"Tamilnadu",@"Karnataka", nil];
    providerNames =[[NSArray alloc]initWithObjects:@"TNEB",@"KSEB",nil];

    //statePicker
    statePicker = [[UIPickerView alloc]initWithFrame:CGRectMake(50, 50, 100, 200)];
    [statePicker setDelegate:self];
    [statePicker setDataSource:self];
    statePicker.showsSelectionIndicator =YES;
    [self.view addSubview:statePicker];

    //providerPicker
    providerPicker = [[UIPickerView alloc]initWithFrame:CGRectMake(50, 150, 100, 200)];
    [providerPicker setDelegate:self];
    [providerPicker setDataSource:self];
    providerPicker.showsSelectionIndicator =YES;
    [self.view addSubview:providerPicker];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    if([pickerView isEqual:statePicker])
    {
        return 1;
    }
    else
    {
        return 1;
    }
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if([pickerView isEqual:statePicker])
    {
        return [stateNames count];
    }
    else
    {
        return [providerNames count];
    }
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if ([pickerView isEqual:statePicker])
    {
        return [stateNames objectAtIndex: row];
    }
    else
    {
        return [providerNames objectAtIndex: row];
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

Solution

  • The UIPickerViewDelegate protocol contains the method:

    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    

    When a row is selected, this method will be called.