Очень простой вопрос по айфону. Как сделать UIPickerView с двумя столбцами?

Я читал другие вопросы о создании UIPickerView с двумя или более столбцами, но не могу найти точное решение.

Как это делается для iPhone программно? Как добавить статические данные? Спасибо!


person john    schedule 24.06.2009    source источник


Ответы (3)


Сделайте так, чтобы ваш контроллер (или что-то еще, управляющее поведением PickerView) поддерживал протокол UIPickerViewDelegate. Затем реализуйте:

- (int) numberOfColumnsInPickerView:(UIPickerView*)picker

чтобы вернуть количество столбцов, которые вы хотите, и

- (int) pickerView:(UIPickerView*)picker numberOfRowsInColumn:(int)col

чтобы вернуть количество строк для каждого столбца и, наконец:

- (UIPickerTableCell*) pickerView:(UIPickerView*)picker tableCellForRow:(int)row inColumn:(int)col

для настройки каждой ячейки.

См. ссылку на UIPickerView и UIPickerViewDelegate.

person zpasternack    schedule 24.06.2009
comment
Ссылка на пример приличного кода недоступна. я удалил это из твоего ответа - person Dejell; 25.08.2013

На эту тему есть отличный учебник здесь.

person Spinoxa    schedule 04.05.2013

Предполагая, что у вас есть словарь или пара массивов, содержащих ваши статические данные. Для простоты я возьму очень простой массив.

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

@interface NVHomeViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>

Это заставит его работать, если просто реализовать пару методов, однако следует проверить документацию на наличие других методов, которые являются необязательными, но обеспечивают больше настройки и контроля.

@interface NVHomeViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>

NSArray *options;
- (void)viewDidLoad
{
    [super viewDidLoad];
    options = @[@"a",@"b",@"c",@"d"];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [options count];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [options objectAtIndex:row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    NSLog(@"%@ selected.",[options objectAtIndex:row]);
}
person Gorky    schedule 22.10.2013