iOS >> 导航栏返回按钮标题不改变

10
我想设置一个在 UINavigationController 堆栈中推送的视图控制器的返回按钮。我使用以下代码,但它不起作用 - 我仍然会看到以前的视图控制器名称出现作为返回按钮标题。

我尝试为 UINavigationController 堆栈中推送的视图控制器设置返回按钮。我使用以下代码,但它没有起作用——我仍然会看到以前的视图控制器名称出现作为返回按钮标题。

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    self.title = @"VC Title";

    UIBarButtonItem* myBackButton = [[UIBarButtonItem alloc]
                                     initWithTitle:@"Back"
                                     style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

    self.navigationItem.backBarButtonItem = myBackButton;

}

有人吗?

7个回答

17

在父视图控制器中:

- (void)viewWillDisappear:(BOOL)animated
{
    self.title = @"Back";
}

- (void)viewWillAppear:(BOOL)animated
{
    self.title = @"Title of your navigation bar";
}

会起作用的


16

尝试在父视图控制器的 viewDidLoad 中设置标题。

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)];

self.navigationItem.leftBarButtonItem = customBarItem;

3
谢谢chris13。搞定了。不过有点奇怪,self.navigationItem与下一个视图控制器相关联而不是当前活动的视图控制器...你知道为什么吗?或者你有一篇好的解释的链接吗? - Ohad Regev
1
我也觉得这很奇怪,但苹果文档让它更清晰了一些。如果有帮助,请接受答案;) - chris13
1
只需使用Storyboard - UIController - Navigation Item,并在此视图的属性检查器中设置“返回按钮”。下一个视图将使用此作为返回按钮文本。 - David

14

根据苹果的文档:

导航栏左侧的条形按钮允许返回到导航堆栈上一个视图控制器。 导航控制器按照以下方式更新导航栏的左侧:

如果新的顶层视图控制器具有自定义的左侧栏按钮项,则显示该项。 要指定自定义的左侧栏按钮项,请设置视图控制器的导航项的leftBarButtonItem属性。

如果顶层视图控制器没有自定义的左侧栏按钮项,但是先前视图控制器的导航项在其backBarButtonItem属性中具有有效项目,则导航栏会显示该项。

如果两个视图控制器都未指定自定义栏按钮项,则使用默认的返回按钮,并且其标题设置为上一个视图控制器(即堆栈上较低级别的视图控制器)的标题属性的值。(如果导航堆栈上只有一个视图控制器,则不显示返回按钮。)

希望这可以帮助您。


谢谢Johnyu。但是如果我选择将自定义的barButton设置为navigationItem.leftBarButtonItem的第一个选项,它就没有默认的返回按钮“箭头”形状外观。有什么解决办法吗? - Ohad Regev
这是链接:更新导航栏 https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006934-CH3-SW25 - situee
谢谢!最终我成功地给我的返回按钮添加了我想要的行为。 - Felix D.

3
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"Put Any Title"
                                      style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

0

针对故事板解决方案;

点击上一个视图控制器的导航项。然后在右侧窗格上单击属性检查器,然后在返回按钮区域中编写“”或其他任何内容。这将告诉视图控制器在下一个(子)视图控制器中显示什么。希望能有所帮助。

针对代码解决方案;

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"back off" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)];
[[self navigationItem] setBackBarButtonItem:customBarItem];

0

0

还有一个解决方案,非常快速。

在您的基础视图控制器中重写此方法,您将在每个推送的视图控制器上都有返回按钮。(只需不添加[super setTitle:title]

- (void)setTitle:(NSString *)title
{
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
    [lbl setText:title];
    [lbl setTextColor:[UIColor whiteColor]];
    [self.navigationItem setTitleView:lbl];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接