2013-03-28 5 views
0
.

. Я создаю навигационный контроллер в делетете приложения и добавляю к нему программную кнопку с программным кодом следующего кода.iOS: Пользовательская кнопка на контроллере навигации видна только на 1 контроллере просмотра, а не на других контроллерах просмотра.

self.navCntrl = [[UINavigationController alloc]initWithRootViewController:self.viewController]; 
// -- Adding INFO button to Navigation bar -- 
UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] 
           initWithTitle:@"i" 
           style:UIBarButtonItemStyleBordered 
           target:self 
           action:@selector(showInfo)]; 
self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil]; 
self.window.rootViewController = self.navCntrl; 

Но проблема в том, что, когда я нажимаю на вторую страницу navigationController кнопку отмены не отображается на панели навигации. Если я вернусь на первую страницу, появится кнопка отмены. Таким образом, по-видимому, кнопка добавляется только для первого вида.

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

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

ответ

1

Кнопки, которые показаны в панели навигации навигационного контроллера в не принадлежит к навигации контроллеру, они свойство навигации каждого отдельного контроллера вида пункта. Обычно эти кнопки выполняют действия, которые применяются к контроллеру представления, который в настоящее время отображается, а не всему навигационному контроллеру.

Если вам действительно нужны все контроллеры просматривать в навигационной иерархии, чтобы иметь ту же кнопку (ы), без копирования и вставки кода везде, вы могли бы установить себя в качестве навигационного контроллера delegate и реализовать navigationController:willShowViewController:animated: так:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    //Assuming you have initialized self.infoButtonItem elsewhere...: 
    viewController.navigationItem.rightBarButtonItem = self.infoButtonItem; 
} 
+0

Он работал безупречно! –

Смежные вопросы