【问题标题】:Storyboard UINavigation Controller Back Button TextStoryboard NavigationController 后退按钮文本
【发布时间】:2023-03-03 10:55:01
【问题描述】:

在 XCode 4.5.1 创建带有导航控制器的故事板应用程序时,我很难尝试为任何被推送的视图控制器设置 BACK 按钮。我正在使用 segue,并且视图控制器按预期显示。但是我想动态更改导航栏和后退按钮的名称并将其放在我的 ViewWillAppear 中:

    self.title = @"Select Songs";
    [self.backButton setTitle:@"Add"];

更改了导航栏的标题,但后退按钮仍显示被推送窗口的名称,而不是文本“添加”。

模拟指标都是推断的。我还在 Xcode 中的视图下方的黑色托盘中添加了一个 BarButtonItem,并将视图控制器的 backButton 连接到 backButton,但文本仍然没有出现。

添加以下日志消息也会产生一些有趣的东西:(但标题栏正在正确更新)

-(void) viewDidAppear:(BOOL)animated {
    NSLog(@"%s %@", __FUNCTION__, self.navigationItem.backBarButtonItem);
    NSLog(@"%s %@", __FUNCTION__, self.navigationController.navigationItem.backBarButtonItem);
}

2012-10-14 15:18:41.835 xxxx[2690:907] -[ViewController viewDidAppear:] (null)
2012-10-14 15:18:41.838 xxxx[2690:907] -[ViewController viewDidAppear:] (null)

【问题讨论】:

    标签: uinavigationcontroller storyboard uinavigationbar uistoryboardsegue


    【解决方案1】:

    公认的答案是 hack,这就是这样做的方法......

    1. 打开故事板
    2. 在 Document Outline 窗口中找到您想要的 ViewController 返回
    3. 单击该 ViewController 的导航项
    4. 在属性资源管理器中,将返回按钮值更改为您的自定义磁贴

    就是这样,享受吧……

    【讨论】:

    • 这与其说是一种 hack,不如说是一种不同的方法。但我同意你的观点,你的方式是更好的方式(我能找到)。特别是如果您的项目依赖于故事板。
    • 我同意这是一个 hack。在我看来,这是一个更好的答案,应该被接受。但我有个问题。如何使后退按钮标题为空白?我有点不喜欢使用文字空间。
    • 注意: 您必须将后退按钮更改为您将要返回的视图控制器,NOT 实际显示自定义标题后退按钮。这让我发疯了一段时间。
    【解决方案2】:

    返回按钮将显示上一个视图的标题,如果没有设置标题,它将显示“返回”。

    因此,在您的 prepareForSegue 方法中,您可以在推送下一个视图之前更改当前视图的标题。然后后退按钮将显示您设置的标题。

    【讨论】:

    • 如果前一个控制器的标题很长,它也会显示“返回”。我花了大约一个小时才弄明白。