UISegmentedControl から選択されたインデックスに基づいて、単一の UIPickerView を別の NSArray のデータで更新しようとしています。現在、コントロールを変更すると、numberOfRowsInComponent は更新されず、ピッカーをスクロールするときにのみ titleForRow が更新されます。
NSArrays は viewDidLoad 内に取り込まれ、SegmentedControl の IBAction で reloadAllComponents メソッドを使用しています。
@synthesize subnetView, classControl;
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
//One column
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
//set number of rows
if (classControl.selectedSegmentIndex == 0){
NSLog(@"Class A Rows %d", [classAArray count]);
return classAArray.count;
}
else if (classControl.selectedSegmentIndex == 1){
return classBArray.count;
}
else if (classControl.selectedSegmentIndex == 2){
return classCArray.count;
}
return 0;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
//set item per row
if (classControl.selectedSegmentIndex == 0){
NSLog(@"Class A Rows %d", [classAArray count]);
return [classAArray objectAtIndex:row];
}
else if (classControl.selectedSegmentIndex == 1){
return [classBArray objectAtIndex:row];
}
else if (classControl.selectedSegmentIndex == 2){
return [classCArray objectAtIndex:row];
}
return 0;
}
-(IBAction)classChange{
[subnetView reloadAllComponents];
}
Interface Builder 内で「選択」されるように選択されたセレクターに基づいて、ピッカーには正しい配列と行数がロードされます。要素の少ない配列を選択するときのこのコードに基づいて、numberOfRowsInComponents は更新されず、小さい配列の最後に到達するとアプリがクラッシュします。
だから私の2つの問題:
- 要素の更新は、スクロール時にのみ発生します。
- reloadAllComponents メソッドを実行しても、行数は更新されません。
聞いてくれてありがとう!