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");