Обновление UIPickerView из UISegmentedControl - PullRequest
2 голосов
/ 04 марта 2012

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

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

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

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

1 Ответ

1 голос
/ 04 марта 2012

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

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

NSLog(@"%@",subnetView);

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

...