Как добавить глобальную кнопку правой панели (UINavigationController) в App20elegate Three20 - PullRequest
0 голосов
/ 05 декабря 2011

Я хочу добавить глобальную кнопку правой панели в глобальный AppDelegate, чтобы все мои контроллеры вида имели эту кнопку автоматически.

Я добавил в AppDelegate

navigator.window.rootViewController.navigationController.navigationItem.rightBarButtonItem     
= [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease]; 

Конечно,вышеуказанный код не работает .. какие-либо проблемы с кодом выше?

Ответы [ 2 ]

7 голосов
/ 06 декабря 2011

Ну, я не уверен, что вы можете сделать это по-своему, потому что UINavigatorController всегда использует кнопки из контроллера представления, который отображается в данный момент, а не из верхнего / корневого контроллера.

Что вы можете сделать, так это создать подкласс TTViewController с новым контроллером представления и установить элемент левой кнопки.

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation BaseViewController


///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIViewController



///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)viewDidLoad {
  [super viewDidLoad];


  self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
                                                                            style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease];
}

и затем вы должны расширить все ваши контроллеры представления с этого базового контроллера, который содержит правый элемент панели навигации

4 голосов
/ 17 декабря 2011

Что вам нужно сделать, это нажать на контроллер навигации, к которому вы хотите подключиться. затем вы можете реализовать UINavigationControllerDelegate (каждый контроллер навигации имеет свойство делегата), который выдаст вам следующие события:

// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

Вы можете реализовать

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

и поставьте свою правую кнопку на место.

...