Reputation:
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
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
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
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