2

Я пытаюсь изменить текст кнопки обратной связи на UINavigationBar после получения чего-либо из сети - в основном, реплицируя iMessage/FB Messenger, добавив новое сообщение в текст кнопки назад, т.е. , < Назад (1) или < Сообщения (2)Динамическое изменение NavigationBar Back Button Текст из представленного ViewController

я могу изменить текст кнопки обратно из представленного ViewController (в viewDidLoad)

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init]; 
barButton.title = @"Back"; 
self.navigationItem.backBarButtonItem = barButton; 

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

Любая идея, как я могу изменить текст кнопки обратной связи с ViewController после того, как он будет представлен?

ответ

3

Прежде всего, UINavigationItem.backBarButtonItem для контроллера представления A не левая кнопка бара, когда A находится на вершине стеки навигации, это левая кнопка бара, когда A является вторыми верхним навигационного стека.

То есть, вы нажимаете A, а затем нажмите B, когда B находится сверху, левая кнопка бар будет A.navigationItem.backBarButtonItem

Так легко, но не настолько элегантное решение будет:

Дайте B слабую ссылку на A и A обеспечивают интерфейс изменить его обратно кнопки, как это:

@implementation A 
-(void)changeBackTitle:(NSString*)title 
{ 
    UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleDone target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = back; 
} 
-(void)restoreBackButton 
{ 
    self.navigationItem.backBarButtonItem = nil; 
} 
@end 

Тогданазывают этот метод, чтобы изменить название кнопки назад, когда B находится на вершине стека

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

+0

Да, это сработало. Благодаря! – Spenciefy