ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 2

9. Выборщик UIPickerView

Знакомство с PickerView

Существует множество программ (в том числе и нативных), которые используют UIPickerView. Стандартный таймер который поставляется вместе с iOS использует UIPickerView для установки времени. В этом примере я покажу как работать с представлением выбора. По своей сути UIPickerView — это та же таблица, только с анимацией прокрутки. У нее похожие методы делегата и похожая работа с ячейками. И сейчас мы в этом убедимся.
Создадим проект на основе Single View Application и назовем его SimplePickerView. Перейдем в ViewController.h и добавим два протокола для поддержки UIPickerView: UIPickerViewDataSource и UIPickerViewDelegate. Для привязки кода к интерфейсу используем спецификаторIBOutlet. Без этого слова наша переменная не будет доступна в редакторе интерфейса.
<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController &lt;UIPickerViewDataSource, UIPickerViewDelegate&gt;

@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;
@property (strong, nonatomic) NSArray *dataSource;

@end</code>
Теперь внесем изменения в ViewController.m, у меня он выглядит вот так:
<code data-result="[object Object]">#import "ViewController.h"

@implementation ViewController

@synthesize pickerView;
@synthesize dataSource;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataSource = [NSArray arrayWithObjects:
                       @"Objective C", 
                       @"C",
                       @"C++",
                       @"Java",
                       @"Pascal",
                       @"Delphi", nil];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.pickerView = nil;
}

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

- (NSInteger)pickerView:(UIPickerView *)thePickerView 
numberOfRowsInComponent:(NSInteger)component 
{
    return dataSource.count;
}

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

@end</code>
Давайте рассмотрим наш код.
  • viewDidLoad мы наполняем наш источник данных (массив) значениями.
  • numberOfComponentsInPickerView — возвращаем количество компонентов выборщика
  • numberOfRowsInComponent — количество полей в одном компоненте
  • titleForRow — надпись для каждого поля
Для полноценной работы осталось связать код с интерфесом. Перейдем в ViewController.xib.  В библиотеке объектов находим компонентUIPickerView и перетягиваем в наш View. Связываем объект кода pickerView с только что добавленным. Теперь выберите объектUIPickerView, ткройте правую панель с компонентами редактора интерфейса, переключитесь на последнюю вкладку Show Connections Inspector. Рядом с аутлетами dataSource и delegate вы увидите круги. Поочередно щелкните на каждом из низ и перетащите на объектFile’s Owner. Более подробно о том как налаживать связь интерфейса с кодом можна почитать здесь или на примере таблицы здесь. На этом связь кода с интерфейсом закончена, давайте запустим наше приложение. Если вы все правильно сделали, то должна появиться следующая картина:
Как видите все работает. Приведенный в примере код – это тот минимум, который необходим для работы с UIPickerView. Если у вас есть вопросы задавайте их в комментариях или на нашем форуме.
Исходный код можно скачать здесь.