user5730430
user5730430

Reputation:

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

Upvotes: 0

Views: 59

Answers (3)

user3432164
user3432164

Reputation:

You can use didSelectRow method of PickerView.

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{
        if (pickerView == self.statePicker)
        {

              NSString *strFirstPickerView = [Statearray objectAtIndex:row];//declare this string globally
              [providerPicker selectRow:row inComponent:0 animated:YES];
              [providerPicker reloadAllComponents];

         }
       else
      {
      if(strFirstPickerView.length==0)
         {

             UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ROFL" 
                                                message:@"Please select state first." 
                                                delegate:self 
                                                cancelButtonTitle:@"OK" 
                                                otherButtonTitles:nil];
            [alert show];
         }
      }
}

Upvotes: 1

Tejas Patel
Tejas Patel

Reputation: 870

This delegate method will automatically call when you select value in picker.

so in this method you can write what you want to perform.

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
     // YOUR CODE HERE.
}

Upvotes: 0

jiangjiefs
jiangjiefs

Reputation: 149

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.

Upvotes: 2

Related Questions