Как установить UIPickerView в каскаде

Я пытаюсь установить два UIPickerView, оба заполнены NSDictionary, это работает нормально, но мне нужно, чтобы второй UIPickerView реализовал обновление, зависящее от выбора первого UIPickerView, понимаете меня?

Первый UIPickerView заполняется следующим образом:

for (NSDictionary *local in json) {
    NSString *nombre = [local objectForKey:@"name"];
    NSString *idLocal = [local objectForKey:@"id"];

    self.dicLocales = [NSDictionary dictionaryWithObjectsAndKeys: idLocal, @"idLocal", nombre, @"nombreLocal", nil];
    [listaLocales addObject:self.dicLocales];
}

А второй UIPickerView заполняется так:

for (NSDictionary *servicio in json) {
    NSString *nombre = [servicio objectForKey:@"name"];
    NSString *idServicio = [servicio objectForKey:@"id"];

    self.dicServicios = [NSDictionary dictionaryWithObjectsAndKeys: idServicio, @"idServicio", nombre, @"nombreServicio", idLocal, @"idLocal", nil];
    [listaServicios1 addObject:self.dicServicios];
}

Обратите внимание на переменную idLocal, которая соответствует идентификатору первых UIPickerView строк. Тогда мне нужно, если в первом UIPickerView выбрана строка с idLocal 1, во втором UIPickerView перезагружается или обновляется только строки, соответствующие idLocal 1.

Пожалуйста, надеюсь, что кто-то может мне помочь, и извините за мой английский: P


person AUbilla    schedule 20.03.2014    source источник


Ответы (2)


вы должны реализовать метод <UIPickerViewDelegate>, как показано ниже

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if ([pickerView isEqual:FirstPickerView]) {
        //SecondPickerView fill code
        [SecondPickerView reloadAllComponents];
    }
    else {
        //SecondPickerView Selected row
    }
}

и соответствующим образом измените свой второй UIPickerView fill Loop

person Haresh Ghatala    schedule 24.04.2014

Я бы рекомендовал использовать (NSInteger)component 0 — первая строка и так далее.

if (component == 0) {
    if (row == 0) {

    }
    else if (row == 1)
    {

    }
}
else if (component == 1)
{
    selectedPositionIndex = row;
    if (row == 0) {

    }
    else if (row == 1)
    {

    }
    else if (row == 2)
    {

    }
    else if (row == 3)
    {

    }
}

Этот код работает почти для всех методов представления средства выбора, которые предоставляют компонент NSInteger.

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

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

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
    return wordArray.count;
}
else if (component == 1)
{
    return positionArray.count;
}
return 0;
}
person iOSAaronDavid    schedule 20.08.2014