iOS >> 导航项后退按钮标题不变

Posted

技术标签:

【中文标题】iOS >> 导航项后退按钮标题不变【英文标题】:iOS >> UINavigation Item Back Button Title Doesn't Change 【发布时间】:2013-08-26 13:40:28 【问题描述】:

我正在尝试为 UINavigationController 堆栈中的推送 VC 集设置 BACK 按钮。我使用以下代码,但它不起作用 - 我仍然得到以前的 VC 名称显示为后退按钮标题。

-(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;


有人吗?

【问题讨论】:

【参考方案1】:

在父视图控制器中:

- (void)viewWillDisappear:(BOOL)animated

    self.title = @"Back";


- (void)viewWillAppear:(BOOL)animated

    self.title = @"Title of your navigation bar";

会成功的

【讨论】:

【参考方案2】:

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

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

self.navigationItem.leftBarButtonItem = customBarItem;

【讨论】:

谢谢克里斯13。做到了。奇怪的是 self.navigationItem 与下一个 VC 相关,而不是与当前活跃的 VC 相关……知道为什么,或者你有一个很好的解释链接吗? 我也觉得这很奇怪,但 Apple Docs 让它更清晰一些。如果它对你有帮助,请接受答案;) 只需使用 Storyboard - UIController - Naviation Item 并在 Attributes Insprector 中为此视图设置“返回按钮”。 NEXT 视图将使用它作为返回按钮文本。【参考方案3】:

来自 Apple 的文档:

导航栏左侧的栏按钮项允许导航回导航堆栈上的上一个视图控制器。导航控制器更新导航栏左侧如下:

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

如果***视图控制器没有自定义左栏按钮项,但前一个视图控制器的导航项在其 backBarButtonItem 属性中有有效项,则导航栏显示该项。

如果任何一个视图控制器都没有指定自定义栏按钮项,则使用默认的后退按钮,并将其标题设置为前一个视图控制器的 title 属性的值——即视图控制器之一在堆栈上降级。 (如果导航堆栈上只有一个视图控制器,则不会显示返回按钮。)

希望这会有所帮助。

【讨论】:

谢谢 johnyu。但是,如果我选择将自定义 barButton 设置为 navigationItem.leftBarButtonItem 的第一个选项,则它没有默认的后退按钮“箭头”形状外观。知道如何解决吗? +1 这是链接:更新导航栏developer.apple.com/library/ios/documentation/uikit/reference/… 谢谢!最后,我设法将我想要的行为赋予了我的后退按钮。【参考方案4】:
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"Put Any Title"
                                      style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

【讨论】:

【参考方案5】:

给前一个viewController的navigationItem设置一个backBarButtonItem。 检查这个答案https://***.com/a/25680043/111277。详细分析请查看我的博文iOS Set Navigation Bar Back Button Title。

【讨论】:

【参考方案6】:

另一种解决方案,非常快。

在您的基本视图控制器中覆盖此方法,您将在每个推送的视图控制器上都有返回按钮。 (只是不要加[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];

【讨论】:

【参考方案7】:

用于情节提要解决方案;

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

用于代码解决方案;

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

【讨论】:

以上是关于iOS >> 导航项后退按钮标题不变的主要内容,如果未能解决你的问题,请参考以下文章

更改导航栏后退按钮的粗细

iOS导航控制器中的后退按钮回调

导航栏项目中未显示标题和后退按钮(iOS 7)

iOS13导航栏后退栏按钮项目色调颜色

更改导航项后退按钮标题

无法更改导航项后退按钮的文本