Бутони Назад, Редактиране и Добавяне в навигационната лента на TableView с Storyboard на 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];
    

Но как мога да внедря чрез код стандартното поведение на бутона "Редактиране"? Искам да кажа, щраквам върху „Редактиране“ и бутонът става „Готово“ и редовете стават за изтриване...

Благодаря предварително, yassa


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