Обновление UIPickerView из UISegmentedControl

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

Итак, у меня две проблемы:

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

Спасибо за внимание!


person jcouser    schedule 04.03.2012    source источник


Ответы (1)


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

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

NSLog(@"%@",subnetView);

Если он регистрирует (NULL), как я ожидал, он просто подключит вашу розетку IB, и все готово.

person NJones    schedule 04.03.2012
comment
Спасибо за ответ. Продолжив работу с приложением, я обнаружил, что classChange не выполняется должным образом. Я изменил выход с TouchUpInside на ValueChanges в построителе интерфейса. Как только это изменение было внесено, все заработало, как ожидалось. Рад, что это было что-то простое! - person jcouser; 04.03.2012