iOS. Приемы программирования - страница 45
Рис. 1.38. Правильный способ создания кнопки Add (Добавить)
Оказывается, в SDK iOS можно создавать системные кнопки. Это делается с помощью метода-инициализатора nitWithBarButtonSystemItem: target: action:, относящегося к классу UIBarButtonItem:
>– (void) performAdd:(id)paramSender{
>NSLog(@"Action method got called.");
>}
>– (void)viewDidLoad{
>[super viewDidLoad];
>self.title = @"First Controller";
>self.navigationItem.rightBarButtonItem =
>[[UIBarButtonItem alloc]
>initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
>target: self
>action:@selector(performAdd:)];
>}
В результате получится именно то, чего мы добивались (рис. 1.39).
Первый параметр метода-инициализатора initWithBarButtonSystemItem: target: action:, относящегося к навигационной кнопке, может принимать в качестве параметров любые значения из перечня UIBarButtonSystemItem:
Рис. 1.39. Системная кнопка Add (Добавить)
>typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
>UIBarButtonSystemItemDone,
>UIBarButtonSystemItemCancel,
>UIBarButtonSystemItemEdit,
>UIBarButtonSystemItemSave,
>UIBarButtonSystemItemAdd,
>UIBarButtonSystemItemFlexibleSpace,
>UIBarButtonSystemItemFixedSpace,
>UIBarButtonSystemItemCompose,
>UIBarButtonSystemItemReply,
>UIBarButtonSystemItemAction,
>UIBarButtonSystemItemOrganize,
>UIBarButtonSystemItemBookmarks,
>UIBarButtonSystemItemSearch,
>UIBarButtonSystemItemRefresh,
>UIBarButtonSystemItemStop,
>UIBarButtonSystemItemCamera,
>UIBarButtonSystemItemTrash,
>UIBarButtonSystemItemPlay,
>UIBarButtonSystemItemPause,
>UIBarButtonSystemItemRewind,
>UIBarButtonSystemItemFastForward,
>#if __IPHONE_3_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
>UIBarButtonSystemItemUndo,
>UIBarButtonSystemItemRedo,
>#endif
>#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
>UIBarButtonSystemItemPageCurl,
>#endif
>};
Один из самых интересных инициализаторов из класса UIBarButtonItem – метод initWithCustomView:. В качестве параметра этот метод может принимать любой вид, то есть мы даже можем добавить на навигационную панель в качестве навигационной кнопки UISwitch (см. раздел 1.2). Это будет выглядеть не очень красиво, но мы просто попробуем:
>– (void) switchIsChanged:(UISwitch *)paramSender{
>if ([paramSender isOn]){
>NSLog(@"Switch is on.");
>} else {
>NSLog(@"Switch is off.");
>}
>}
>– (void)viewDidLoad{
>[super viewDidLoad];
>self.view.backgroundColor = [UIColor whiteColor];
>self.title = @"First Controller";
>UISwitch *simpleSwitch = [[UISwitch alloc] init];
>simpleSwitch.on = YES;
>[simpleSwitch addTarget: self
>action:@selector(switchIsChanged:)
>forControlEvents: UIControlEventValueChanged];
>self.navigationItem.rightBarButtonItem =
>[[UIBarButtonItem alloc] initWithCustomView: simpleSwitch];
>}
Вот что получается (рис. 1.40).
Рис. 1.40. Переключатель, добавленный на навигационную панель
На навигационной панели можно создавать очень и очень занятные кнопки. Просто взгляните, что делает Apple со стрелками, направленными вверх и вниз, расположенными в правом верхнем углу на рис. 1.36. А почему бы нам тоже так не сделать? Впечатление такое, как будто в кнопку встроен сегментированный элемент управления (см. раздел 1.8). Итак, нам нужно создать такой элемент управления с двумя сегментами, добавить его на навигационную кнопку и, наконец, поставить эту кнопку на навигационную панель. Начнем:
>– (void) segmentedControlTapped:(UISegmentedControl *)paramSender{
>switch (paramSender.selectedSegmentIndex){
>case 0:{
>NSLog(@"Up");