Кнопки «Назад», «Изменить» и «Добавить» на панели навигации TableView с раскадровкой на iOS

Я столкнулся с некоторыми проблемами при реализации табличного представления с помощью кнопок «Назад», «Редактировать» и «Добавить» на панели навигации. Доступ к табличному представлению осуществляется нажатием на строку другого табличного представления, поэтому кнопка «Назад» добавляется автоматически. В раскадровке я добавил кнопку «Добавить» на панель навигации. С помощью кода я добавил кнопку "Редактировать" (Я использовал код, поскольку, если я добавлю кнопку с раскадровкой, я не знаю, как воспроизвести стандартное поведение "Редактировать"... ):

self.navigationItem.leftBarButtonItem = self.editButtonItem;

Проблема в том, что таким образом кнопка «Редактировать» скрывает кнопку «Назад» на панели навигации.

На данный момент у меня два вопроса:

  1. Можно ли с помощью раскадровки добавить третью кнопку на панель навигации?
  2. Если мне нужно сделать это программно, я знаю, что могу сделать это следующим образом:

    UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    [button setFrame:CGRectMake(width-90,6,50,30)];
    [button setTitle:@"Edit" forState:UIControlStateNormal];
    button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
    [self.navigationController.navigationBar addSubview:button];
    

Но как реализовать через код стандартное поведение кнопки "Редактировать"? Я имею в виду, я нажимаю «Изменить», и кнопка становится «Готово», и строки становятся удаляемыми...

Заранее спасибо, Ясса


person yassassin    schedule 07.12.2011    source источник


Ответы (2)


Во-первых, в документах Apple говорится, что «вы не добавляете подпредставления на панель навигации напрямую». Не знаю, достаточно ли этого, чтобы приложение было выброшено из магазина, но это не считается «правильным».

Во-вторых, вы можете добавить более трех кнопок к UINavigationItem в iOS 5, но не в iOS 4 или более ранних версиях.

Наконец, я бы оставил кнопку редактирования вверху справа и вернулся вверху слева. Вот где люди ждут их. Если бы мне нужна была кнопка добавления (и я использую iOS 5), я бы поместил ее рядом с кнопкой редактирования.

Прости; никакой помощи на раскадровках. Ничего о них не знаю.

person smparkes    schedule 07.12.2011
comment
Большое спасибо за ответ. Но чтобы программно реализовать панель с 3 кнопками, мне нужно создать новую панель инструментов: UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 105, 44.01)]; или я могу просто добавить еще одну кнопку на панель навигации [self navigationItem]? Если да, то каким образом? - person yassassin; 11.12.2011
comment
Вы просто добавляете одну или несколько кнопок к элементу навигации. См. свойства и методы с BarButton в имени в UINavigationItem (developer.apple.com/library/IOs/#documentation/UIKit/Reference/). Обычно я переопределяю метод navigationItem в своих контроллерах представления, вызываю super, чтобы получить значение по умолчанию, добавляю кнопки, если я еще не добавил их, и возвращаю результат. - person smparkes; 11.12.2011
comment
Спасибо большое, вы открыли для меня целый новый мир! Мне удалось реализовать изумительную панель навигации с тремя кнопками!!! :) - person yassassin; 11.12.2011

В случае, если кто-то еще должен наткнуться на этот вопрос, решение довольно простое. UINavigationItem имеет свойство для rightItems, которое представляет собой просто массив UIBarButtonItems. Поместите кнопку добавления и кнопку редактирования в массив и назначьте их rightItems, и все готово :-) А вот пример фрагмента кода:

UITableViewController *table = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self     action:@selector(insertNewObject:)];
NSArray *barButtons = [NSArray arrayWithObjects:table.editButtonItem, addButton, nil];
table.navigationItem.rightBarButtonItems = barButtons;
person CJPresler    schedule 26.03.2013
comment
Это действительно лучший ответ - person Wayne; 10.12.2013
comment
Быстро: let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "methodName:"); self.navigationItem.rightBarButtonItems = [self.editButtonItem(), addButton] - person Kevin Qi; 13.07.2015