Я пытаюсь обновить один UIPickerView с другим NSArray данных, на основе которого Index выбирается из UISegmentedControl. В настоящее время при изменении элемента управления numberOfRowsInComponent не обновляется, а titleForRow будет обновляться только при прокрутке средства выбора.
NSArrays заполняются в viewDidLoad, и я использую метод reloadAllComponents после IBAction SegmentedControl.
@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];
}
В зависимости от того, какой селектор выбран для «выбора» в конструкторе интерфейса, он загружается с правильным массивом и количеством строк. Основываясь на этом коде при выборе массива с меньшим количеством элементов, numberOfRowsInComponents не обновляется, и приложение падает при достижении конца меньшего массива.
Итак, две мои проблемы:
- Обновление элементов происходит только при прокрутке.
- Число строк не обновляется при выполнении метода reloadAllComponents.
Спасибо за внимание!