我试图为我的问题找到一个解决方案一个多星期了,但没有成功解决这个网站上的其他类似问题。如何从第一个组件选择中加载UIPickerView的第二个组件中的数据
我有我的pickerView多个NSMutableArrays,我试图根据第一个组件的选择设置第二个组件的数据。我的主要问题是,当我选择第一个组件中的第一个选项以外的任何其他组件时,第二个组件的数据是空的。当选择第一个组件的第一个选项时,我的所有数组都依次排列在第二个组件中,但每个组件数据只需要一个数组。
这是我在ViewController.h代码:
@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
NSMutableArray *maListeTrier;
NSMutableArray *maListeTypes;
NSMutableArray *maListeSousTypes;
NSMutableArray *maListeSousTypes2;
NSMutableArray *maListeSousTypes3;
NSMutableArray *maListeSousTypes4;
NSMutableArray *maListeSousTypes5;
}
@property NSString *selectedType;
@property NSString *selectedArray;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property (weak, nonatomic) IBOutlet UILabel *labelType;
@property (weak, nonatomic) IBOutlet UILabel *labelSousType;
这是我ViewController.m代码:
@synthesize selectedType;
@synthesize selectedArray;
- (void)viewDidLoad {
[super viewDidLoad];
selectedType=[[NSString alloc]init];
selectedArray=[[NSString alloc]init];
maListeTypes = [[NSMutableArray alloc] init];
[maListeTypes addObject:@"Type 1"];
[maListeTypes addObject:@"Type 2"];
maListeSousTypes=[[NSMutableArray alloc]init];
[maListeSousTypes addObject:@"Sous-type 1"];
[maListeSousTypes addObject:@"Sous-type 2"];
[maListeSousTypes addObject:@"Sous-type 3"];
[maListeSousTypes addObject:@"Sous-type 4"];
[maListeSousTypes addObject:@"Sous-type 5"];
maListeSousTypes2=[[NSMutableArray alloc]init];
[maListeSousTypes addObject:@"22222"];
[maListeSousTypes addObject:@"22222"];
[maListeSousTypes addObject:@"22222"];
[maListeSousTypes addObject:@"22222"];
[maListeSousTypes addObject:@"22222"];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//Méthode pour déterminer le nombre de colonnes dans chaque picker view
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 2;
}
//Méthode pour déterminer le nombre de rangées dans chaque picker view
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if(component==0){
return [maListeTypes count];
}
else if(component==1){
if([selectedType isEqualToString:@"Type 1"]){
return [maListeSousTypes count];
}
else if([selectedType isEqualToString:@"Type 2"]){
return [maListeSousTypes2 count];
}
else{
return 0;
}
}
else{
return 0;
}
}
//Méthode pour indiquer quoi afficher comme choix dans chaque picker view
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if(component==0){
return [maListeTypes objectAtIndex:row];
}
else{
if([selectedType isEqualToString:@"Type 1"]){
return [maListeSousTypes objectAtIndex:row];
}
else{
return [maListeSousTypes2 objectAtIndex:row];
}
}
}
//Méthode pour indiquer quelle action va se produire lorsqu'on clique sur un des choix des picker views
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if(component==0){
selectedType=[maListeTypes objectAtIndex:row];
[pickerView reloadAllComponents];
_labelType.text=[maListeTypes objectAtIndex:[pickerView selectedRowInComponent:0]];
}
else if(component==1){
_labelSousType.text=[maListeSousTypes objectAtIndex:[pickerView selectedRowInComponent:1]];
}
}
当我的第一个组件选择是首选“1型”在我的第二个组成部分我看到的NSMutableArray数据‘maListeSousTypes’和‘maListeSousTypes2’此起彼伏喜欢这里: Screenshot
当从第一个组件中选择“类型2”时,我的第二个组件是空的。
你永远不会向maListeSousTypes2添加任何东西。你错过了我怀疑的复制和粘贴错误。 '[maListeSousTypes addObject:@“22222”];'只是添加到'maListeSousTypes'中,您已经在'NSString's之前添加了一堆。 – beyowulf
非常感谢!这是我错过了,并没有看我的代码的正确部分。现在一切正常。 – Vomarhk