2012-05-16 3 views
2

У меня есть любопытная проблема с backBarButtonItem. Я хочу заменить его название во всем приложении для «Назад», а замена кнопки «Назад» работает в большинстве событий -viewDidLoad, но в других представлениях она не работает и показывает имя предыдущего представления. У кого-то такая же проблема?UINavigationItem BackBarButtonItem не заменен

P.S. Способ замены backBarButtonItem является стандартным, создающим UIBarButtonItem и устанавливающий его на viewController.navigationIten.backBarButtonItem.

+0

Любопытный случай Бенджамина Баттона? – abbood

ответ

1

Ну, наконец, я нашел решение этой проблемы.

Если вы хотите, чтобы любой backBarButtonItem вашего приложения имел одинаковый заголовок, хороший подход заключается в подклассе UINavigationController и переопределении - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated для замены кнопки «Назад».

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"BackButtonLabel", "") 
                    style:UIBarButtonItemStyleDone 
                    target:nil 
                    action:nil]; 
    viewController.navigationItem.backBarButtonItem = _backButton; 
    _backButton = nil; 
    [_backButton release]; 

    [super pushViewController:viewController animated:animated]; 
} 

Таким образом, каждая кнопка возврата в приложении будет иметь одинаковую заголовок.

Надеюсь, это будет полезно для всех.

14

backBarButtonItem не устанавливает кнопку возврата, которое отображается в текущем виде, он устанавливает, что кнопку назад переходит к текущему виду, т.е. кнопку возврата в следующем виде.

Это имеет смысл, потому что заголовок кнопки «Назад» обычно является заголовком предыдущего контроллера представления.

Если вы хотите установить левую кнопку в навигационной панели напрямую, используйте self.navigationItem.leftBarButtonItem.

+0

Но почему в некоторых из них он работает, а не в других? – Rotten

+0

Разочаровано, что это не документировано вообще. Спасибо @omz –

+0

OMG, что 1-й абзац: mindblown: –

1

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

YourViewController *objView = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil]; 
      [email protected]"Back"; 
      [self.navigationController pushViewController:objView animated:YES]; 

вашего Далее Вид ПОЯВИТСЯ с задней кнопкой .... :)

+0

Я пробовал это ранее, но он также меняет название NavigationItem перед исчезновением и не выглядит так хорошо ... – Rotten

+0

в yourViewController в определении также backBarButton m i right ?? –

+0

Нет, это было не так, но я, наконец, решил. Посмотрите мой ответ ниже этого. – Rotten

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