Использование UISegmentedControl для переключения между несколькими массивами с помощью uipickerview - PullRequest
1 голос
/ 25 января 2010

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

- (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? Можно ли сделать так, чтобы это был просто плавный процесс сортировки? Я полагаю, что я разобью массив1 на другие массивы на основе условий, которые я установил в своем UISegmentedControl, как мне связать их, чтобы они выглядели и работали хорошо? Любая помощь по этой теме, как всегда, с благодарностью! Спасибо

1 Ответ

2 голосов
/ 25 января 2010

Используйте свойство 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];
}
...