Я попытался найти решение для своей проблемы уже более недели, но без успеха с другими подобными вопросами на этом веб-сайте.Как загрузить данные во втором компоненте UIPickerView с первого выбора компонентов
У меня есть несколько NSMutableArrays для моего pickerView, и я пытаюсь установить данные второго компонента на основе выбора первого компонента. Моя основная проблема заключается в том, что данные второго компонента пусты, когда я выбираю ничего, кроме первого выбора в первом компоненте. Когда выбран первый выбор в первом компоненте, у меня есть все мои массивы вместе один за другим в моем втором компоненте, но я хочу только 1 массив на данные компонента.
Это мой код в 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
Когда «Первый тип» выбран из первого компонента, мой второй компонент пуст.
Вы никогда ничего не добавите к 'maListeSousTypes2'. Я подозреваю, что вы скопировали и наклеили неправильно. '[maListeSousTypes addObject: @" 22222 "];' просто добавляет к 'maListeSousTypes', который вы уже добавили в' NSString' ранее. – beyowulf
Спасибо вам большое! Это то, чего я отсутствовал, и не смотрел на правую часть моего кода. Сейчас все работает. – Vomarhk