Stewartps
Stewartps

Reputation: 55

2 Pickers in 1 ViewController? Xcode

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

Answers (3)

Milan Gupta
Milan Gupta

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

Sky Appliconic
Sky Appliconic

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

Luca D'Alberti
Luca D'Alberti

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

Related Questions