Для двух средств выбора в одном представлении titleForRow всегда вызывается со значением компонента 0.

У меня есть два сборщика в одном контроллере представления. Они используют два NSArray для своих данных.

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

Почему это происходит и как это исправить?

Это мои методы делегата:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    NSLog(@"%d",[pickerView tag]);
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:    (NSInteger)component
{
    NSLog(@"%d",[pickerView tag]);
    if ([pickerView tag] == 0)
        return providersList.count;
    else
        return amountList.count;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSLog(@"%d, %d",[pickerView tag],component);
    if ([pickerView tag] == 0)
        return [providersList objectAtIndex:component];
    else
        if ([pickerView tag] == 1)
            return [amountList objectAtIndex:component];
        else
            return nil;
}

Использование xcode 4.3 и iOS5.


person PhoenixDev    schedule 03.08.2012    source источник


Ответы (1)


Компонент используется для количества разделов в средстве выбора, а строка используется для определенной строки в компоненте. Когда ваш сборщик имеет несколько разделов, вы получите разные значения для компонента. Row указывает на компонент Row in.

Итак, если у вас есть только один компонент, вам следует использовать row.

[amountList objectAtIndex:row];
person Apurv    schedule 03.08.2012