Я пытаюсь обновить один UIPickerView с помощью другого NSArray данных, на основе которого Index выбран из UISegmentedControl. В настоящее время, когда я меняю элемент управления, numberOfRowsInComponent не обновляется, и titleForRow будет обновляться только при прокрутке сборщика.Обновление UIPickerView из UISegmentedControl
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.
Спасибо, что посмотрели!
Спасибо за ответ. Из продолжения приложения я обнаружил, что classChange не выполняется должным образом. Я изменил выход с TouchUpInside на ValueChanges в построителе интерфейса. Как только это изменение было сделано, все начало работать, как ожидалось. Рад, что это было просто! – jcouser