Использование UISegmentedControl для переключения между несколькими массивами с помощью uipickerview

Я работаю над основными данными, используя приложение, и одним из представлений является EditingViewController, который действует как контроллер для ряда элементов пользовательского интерфейса, описывающих атрибуты объектов. Внутри EditingViewController все мои элементы пользовательского интерфейса вызываются и скрываются с помощью операции .hidden = YES/NO;. Один из моих элементов пользовательского интерфейса — это uipickerview. В настоящее время существует один массив для каждого из двух разных представлений. Это означает, что если они нажмут на поле имени, массив1 загрузится в сборщик1, и они будут выбирать из него, а затем, если они нажмут на фамилию, массив2 загрузится в сборщик2, и жизнь прекрасна. Вот мой код, который я использую, чтобы сделать эту работу до сих пор:

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
if (picker1 == self.picker) {
    return [array1 objectAtIndex:row];
} else {
    return [array2 objectAtIndex:row];
}
}

Но! array1 настолько велик, что я хотел бы добавить UISegmentedControl в picker1, чтобы он мог немного лучше сортировать информацию array1. Я знаю, что UISegmentedControl — это просто красивый набор кнопок, требующий, чтобы IBActions были связаны и прочее, но как я могу реализовать это так, чтобы в одном из моих представлений первое, просто picker1 и array1 управляется UISegmentedControl? Можно ли сделать так, чтобы это был просто плавный процесс сортировки? Я полагаю, что разобью array1 на другие массивы на основе условий, которые я установил в своем UISegmentedControl, как мне связать их, чтобы они выглядели и работали хорошо? Любая помощь по этой теме, как всегда, приветствуется! Спасибо


person Steve    schedule 25.01.2010    source источник


Ответы (1)


Используйте ссылку selectedSegmentIndex.

Например:

enum {
    SEGMENT1,
    SEGMENT2,
    SEGMENT3
};

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
    if (picker1 == self.picker) {
        if (segmentedControl.selectedSegmentIndex == SEGMENT1) {
            return [array1sub1 objectAtIndex:row];
        } else if (segmentedControl.selectedSegmentIndex == SEGMENT2) {
            return [array1sub2 objectAtIndex:row];
        } else if (segmentedControl.selectedSegmentIndex == SEGMENT3) {
            return [array1sub3 objectAtIndex:row];
        }
    } else {
        return [array2 objectAtIndex:row];
    }
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if (picker1 == self.picker) {
        if (segmentedControl.selectedSegmentIndex == SEGMENT1) {
            return [array1sub1 count];
        } else if (segmentedControl.selectedSegmentIndex == SEGMENT2) {
            return [array1sub2 count];
        } else if (segmentedControl.selectedSegmentIndex == SEGMENT3) {
            return [array1sub3 count];
        }
    } else {
        return [array2 count];
    }
}

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

- (IBAction)handleValueChanged
{
    [self.picker reloadAllComponents];
}
person gerry3    schedule 25.01.2010