Несколько bar button item рядом

21 июня 2014 г. · 3 мин чтения

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

Задача, которая часто встречается на практике: необходимо разместить несколько bar button item рядом. Например, как в моём приложении «Конкурсы, игры, розыгрыши» — сверху 4 кнопки: увеличить шрифт, уменьшить шрифт, поделиться с друзьями и добавить в избранное.

Как выяснилось, Apple лучше знает, сколько нам нужно кнопок с каждой стороны, и через IB вы это сделать не сможете. Только разместить одну кнопку справа, одну слева и посередине, например на сцене storyboard. Так что придётся делать это программно.

Код вставляется во viewDidLoad и выглядит так:

// Создаем объект-картинку для кнопки "Избранное"
UIImage *Favorites_add = [UIImage imageNamed:@"favorites_add.png"];
UIBarButtonItem *addFavoritesItem = [[UIBarButtonItem alloc] initWithImage:Favorites_add
    style:UIBarButtonItemStylePlain target:self action:@selector(addFavorites)];

// Почти то же самое, но берем стандартное изображение Action,
// поэтому картинку для кнопки создавать не нужно.
UIBarButtonItem *sendSocialItem = [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemAction
    target:self action:@selector(sendSocial)];

// Все остальные кнопки из наших картинок, предварительно добавленных в проект
UIImage *Font_minus = [UIImage imageNamed:@"font_down.png"];
UIBarButtonItem *fontMinusItem = [[UIBarButtonItem alloc] initWithImage:Font_minus
    style:UIBarButtonItemStylePlain target:self action:@selector(fontChanges:)];
UIImage *Font_plus = [UIImage imageNamed:@"font_up.png"];
UIBarButtonItem *fontPlusItem = [[UIBarButtonItem alloc] initWithImage:Font_plus
    style:UIBarButtonItemStylePlain target:self action:@selector(fontChanges:)];

Массив наших кнопочек:

NSArray *actionButtonItems = @[ sendSocialItem, addFavoritesItem, fontMinusItem, fontPlusItem ];
// Присваиваем свойству rightBarButtonItems наш массив —
// и вместо одной кнопки справа будут 4
self.navigationItem.rightBarButtonItems = actionButtonItems;

Возникает вопрос, как заставить наши кнопки что-то делать. Рассмотрим на примере кнопки «Избранное», для остальных аналогично.

Когда мы создавали кнопку, написали:

target:self action:@selector(addFavorites)];

Т.е. в этом классе должен быть метод с названием addFavorites, в котором и задано действие. Например:

-(void)addFavorites
    self.labelName.text = @"Кнопочка нажалась";