Reputation: 55
I'm trying to get 2 pickers into one view controller and im really struggling at the minute. I've created two arrays and I thought I had linked them both up, however it appears both pickers and fetching data from the same data source. The first picker should change the data selected (myLabel.text) which it does, but it also changes the career selected which id like the second picker to do. If I could have some help on this matter it would be greatly appreciated. Thank you
I have also tried searching similar issues that other people are facing, but for some reason i just can't link it to my code.
- (void)viewDidLoad {
[super viewDidLoad];
myLabel.text = @"Use the scroller above...";
datePickerView.delegate = self;
CareerPickerView.dataSource = self;
_pickerViewArray = @[@"Before September 2012",@"After September 2012"];
CareerViewArray = @[@"This is choice 1",@"This is choice 2"];
CareerPickerView.delegate = self;
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSString *dateSelected = [_pickerViewArray objectAtIndex:row];
NSString *careerSelected = [CareerViewArray objectAtIndex:row];
myLabel.text = dateSelected;
startingsalary.text = careerSelected;
if ([dateSelected isEqualToString:@"Before September 2012"])
myLabel.text = @"Before September 2012";
if ([dateSelected isEqualToString:@"After September 2012"])
myLabel.text = @"After September 2012";
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return _pickerViewArray.count;
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return _pickerViewArray[row];
}
@end
Upvotes: 0
Views: 85
Reputation: 1181
You should maintain both the arrays and the picker view that is being selected properly.
Follow below code:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if(pickerView == datePickerView)
{
NSString *dateSelected = [_pickerViewArray objectAtIndex:row];
myLabel.text = dateSelected;
}
else if(pickerView == CareerPickerView)
{
NSString *careerSelected = [CareerViewArray objectAtIndex:row];
startingsalary.text = careerSelected;
}
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if(pickerView == datePickerView)
{
return _pickerViewArray.count;
}
else if(pickerView == CareerPickerView)
{
return CareerViewArray.count;
}
return 1;
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if(pickerView == datePickerView)
{
return _pickerViewArray[row];
}
else if(pickerView == CareerPickerView)
{
return CareerViewArray[row];
}
return nil;
}
Upvotes: 1
Reputation: 1
Apply tags to your UIPickerview and in each delegate method compare picker with tag make sure you are returning objects within braces which is differentiated for tags
Upvotes: 0
Reputation: 4849
You have to check which Picker is calling the delegate
in the method pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
Check which UIPickerView
is now calling that method and do whatever you need
Upvotes: 1