2012-03-04 5 views
2

Я пытаюсь обновить один 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 не обновляется, и приложение будет сбой при достижении конца меньшего массива.

Так мои две проблемы:

  1. Обновление элементов происходит только при прокрутке.
  2. Число строк не обновляется при выполнении метода reloadAllComponents.

Спасибо, что посмотрели!

ответ

1

Я видел это раньше. Обычно это вызвано отключением розетки pickerview, эффективно называя reloadAllComponents ничем. Но когда вы прокручиваете подключенный источник данных, и методы делегирования все еще работают.

Это можно легко проверить с помощью входа значения выходного отверстия, используя:

NSLog(@"%@",subnetView); 

Если он записывает (NULL) как я ожидаю, что это будет просто подключить выход IB и вы сделали.

+0

Спасибо за ответ. Из продолжения приложения я обнаружил, что classChange не выполняется должным образом. Я изменил выход с TouchUpInside на ValueChanges в построителе интерфейса. Как только это изменение было сделано, все начало работать, как ожидалось. Рад, что это было просто! – jcouser

Смежные вопросы