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