UINavigationItem BackBarButtonItem未替换

时间:2012-05-16 15:57:03

标签: iphone objective-c ios

我对backBarButtonItem有一个奇怪的问题。我想在整个“Back”应用程序中替换它的标题,并且替换后退按钮适用于大多数-viewDidLoad事件,但在其他视图中它不起作用并显示上一个视图的名称。有人有同样的问题吗?

P.S。替换backBarButtonItem的方法是实例化UIBarButtonItem并将其设置为viewController.navigationIten.backBarButtonItem属性的标准方法。

3 个答案:

答案 0 :(得分:14)

backBarButtonItem未设置当前视图中显示的后退按钮,它设置导航到当前视图的后退按钮,即下一个视图中的后退按钮

这是有道理的,因为后退按钮的标题通常是前一个视图控制器的标题。

如果要直接在导航栏中设置左按钮,请使用self.navigationItem.leftBarButtonItem

答案 1 :(得分:1)

当您在分配下一个viewcontroller对象后从当前视图中推送视图时,只需将波纹线放入

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

您的下一个视图将显示后退按钮.... :)

答案 2 :(得分: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];
}

通过这种方式,应用程序中的每个后退按钮都具有相同的标题。

我希望这会对其他人有所帮助。