Ios 1个ViewController中有2个选择器?Xcode

Ios 1个ViewController中有2个选择器?Xcode,ios,objective-c,Ios,Objective C,我正试图把两个选择器放到一个视图控制器中,我现在真的很挣扎。我已经创建了两个数组,我想我已经把它们都连接起来了,但是似乎选择器和获取数据都来自同一个数据源。第一个选择器应该更改它所选择的数据(myLabel.text),但它也会更改所选择的职业id,就像第二个选择器一样。如果我能在这件事上得到一些帮助,我将不胜感激。多谢各位 我也尝试过搜索其他人面临的类似问题,但由于某些原因,我无法将其链接到我的代码 - (void)viewDidLoad { [super viewDidLoad];

我正试图把两个选择器放到一个视图控制器中,我现在真的很挣扎。我已经创建了两个数组,我想我已经把它们都连接起来了,但是似乎选择器和获取数据都来自同一个数据源。第一个选择器应该更改它所选择的数据(myLabel.text),但它也会更改所选择的职业id,就像第二个选择器一样。如果我能在这件事上得到一些帮助,我将不胜感激。多谢各位

我也尝试过搜索其他人面临的类似问题,但由于某些原因,我无法将其链接到我的代码

- (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

您必须检查方法
pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)组件中的
代理调用的是哪个选择器


检查哪个
UIPickerView
正在调用该方法,并执行您需要的任何操作您必须检查方法
pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row incomonent:(NSInteger)component组件中的哪个选择器正在调用
委托


检查哪个
UIPickerView
正在调用该方法,并执行您需要的任何操作

将标记应用于UIPickerView,并在每个委托方法中将选取器与标记进行比较,确保您在大括号内返回的对象与标记不同

将标记应用于UIPickerView并在每个委托方法中比较选取器使用tag确保返回大括号内的对象,该大括号与标记不同

您应该维护正确选择的数组和选择器视图

请遵循以下代码:

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

您应该维护正确选择的阵列和选择器视图

请遵循以下代码:

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

在所有picker view委托方法中,您需要分别处理两个pickerViews和数据源,可能使用tag就足够了。在所有picker view委托方法中,您需要分别处理两个pickerViews和数据源,可能使用tag就够了。感谢您的回复!那么,我该如何填充职业选择者呢?现在,当我更改所选日期选取者时,它似乎没有改变期望的起薪,这很好,但我现在的职业数组中没有任何内容,它似乎是空的?在
numberOfRowsInComponent
中有一个键入错误,我已经编辑了它。@Stewartps如果您的数组已经填入viewDidLoad,然后只需重新加载picker视图的组件,如[CareerPickerView重新加载所有组件];如果这不起作用,请尝试在显示pacer视图之前使用对象分配数组。谢谢您的回复!那么,我该如何填充职业选择者呢?现在,当我更改所选日期选取者时,它似乎没有改变期望的起薪,这很好,但我现在的职业数组中没有任何内容,它似乎是空的?在
numberOfRowsInComponent
中有一个键入错误,我已经编辑了它。@Stewartps如果您的数组已经填入viewDidLoad,然后只需重新加载picker视图的组件,如[CareerPickerView重新加载所有组件];如果这不起作用,请尝试在显示pacer视图之前使用对象分配数组。