|
Май
26
|
В представлении выбора пользователь указывает в списке интересующий его элемент. В этом уроке мы узнаем, как быстро задавать его данного представления и настраивать реакцию на события. Вот как будет выглядеть наше приложение:

Создаем проект.
Выбрав опцию “Windows-Based Application“, создайте новый проект. Свой я назвал “PickerView“. Следующим шагом добавьте еще одно представление “PickerView” и создайте для него контроллер “PickerViewController“. Включите в представление “UIPickerView” и настройте соответствующие связи. “PickerViewController” реализует два протокола, а заголовочный файл для него выглядит так:
1 2 3 4 5 6 7 8 9 10 | //RootViewController.h #import <UIKit/UIKit.h> @interface PickerViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> { IBOutlet UIPickerView *pickerView; NSMutableArray *arrayColors; } @end |
Связи представления выбора представлены ниже:

К подпредставлению окна “UIPickerView” добавляется следующим образом:
1 2 3 4 5 6 7 8 9 10 | //RootViewController.m - (void)applicationDidFinishLaunching:(UIApplication *)application { pvController = [[PickerViewController alloc] initWithNibName:@"PickerView" bundle:[NSBundle mainBundle]]; [window addSubview:pvController.view]; // Заменяем точку настройки после запуска представления [window makeKeyAndVisible]; } |
Создание источника данных.
Предлагаю создать источник данных со всеми цветами радуги. Множество декларируется в заголовочном файле и освобождается в методе “dealloc“. Данные заносятся в методе “viewDidLoad“. Вот как выглядит соответствующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 | //PickerViewController.m - (void)viewDidLoad { [super viewDidLoad]; arrayColors = [[NSMutableArray alloc] init]; [arrayColors addObject:@"Red"]; [arrayColors addObject:@"Orange"]; [arrayColors addObject:@"Yellow"]; [arrayColors addObject:@"Green"]; [arrayColors addObject:@"Blue"]; [arrayColors addObject:@"Indigo"]; [arrayColors addObject:@"Violet"]; } |
Представление выбора можно разделить на отдельные компоненты. В методе “numberOfComponentsInPickerView” укажем, какое их количество будет выводиться на экран:
1 2 3 4 5 | //PickerViewController.m - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { return 1; } |
Теперь, когда представление знает, на какое число компонентов рассчитывать, укажем количество отображаемых на экране строк в “pickerView:numberOfRowsInComponent“. Вот как выглядит исходный код:
1 2 3 4 5 | //PickerViewController.m - (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { return [arrayColors count]; } |
Метод “pickerView:titleForRow:forComponent” вызывается n-ное количество раз, где n—число, возвращаемое в “pickerView:titleForRow:forComponent“. Исходный код приведен ниже:
1 2 3 4 5 | //PickerViewController.m - (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { return [arrayColors objectAtIndex:row]; } |
В представленном фрагменте мы возвращаем для индекса объект с параметром ряда. Параметром компонента в данном случае можно пренебречь, поскольку отображаться он будет один. Если компонентов несколько, возвращаем строку, представленную в конкретном компоненте. Запустив приложение, увидим значения в интерфейсе выбора.
Обработка событий.
При выборе одного из элементов данного представления вызывается метод “pickerView:didSelectRow:inComponent” В нашем случае я просто регистрирую указанный цвет и номер строки. Код при этом выглядит следующим образом:
1 2 3 4 5 | //PickerViewController.m - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row); } |
Заключение.
Представление выбора — оптимальный способ отображения списка элементов для выбора одного из них. В этом уроке мы убедились, что настройка данного представления и реакция на события не представляет собой ничего сложного. Удачи!


(2 голосов, средний: 3.50 из 5)
Сентябрь 30th, 2011 at 07:42
Замечание одно, но Большое.
Зачем надо было называть еще и проект PickerView и еще делать контроллер PickerViewController?
Путаница страшная. С первого раза у меня не получилось, хотя вроде бы делал все по инструкциям
Октябрь 1st, 2011 at 03:03
Здраствуйте
Вы можете создать урок по Xcode как создать простенкую игру для iphone.
Поэтапно ну что требуется как это ставить ну и т.д
Буду очень благодарен !
Октябрь 10th, 2011 at 09:41
Есть тут создание простенькой игры - iTennis. Ищите в поиске.