如何向 UINavigationBar 添加后退按钮?

Posted

技术标签:

【中文标题】如何向 UINavigationBar 添加后退按钮?【英文标题】:How do I add a back button to my UINavigationBar? 【发布时间】:2016-01-19 23:54:45 【问题描述】:

用户通过 push segue 从前一个视图控制器到达此视图控制器,因此我希望在 UINavigationBar 中有一个后退按钮以允许他们返回。

如果我右键单击故事板中的 viewController 并选择 Embed in > Navigation Controller,通常会默认显示此后退按钮,但这样做会导致崩溃,我更喜欢以编程方式执行操作,所以我决定这样做在viewDidLoad 像这样:

    // Nav bar
    UINavigationBar *navbar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];

    // Back Button
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:self action:@selector(Back)];
    self.navigationItem.leftBarButtonItem = backButton;

    [self.view addSubview:navbar];

这成功地在顶部添加了一个导航栏,但它没有按预期添加后退按钮。我已经尝试了here、here 和here 给出的解决方案,但都没有解决问题。

【问题讨论】:

这正是您不应该在代码中执行此操作的原因,它会通过创建视图来污染您的控制器,并且只会打开通向具有怪异行为的笨重 UI 的大门。将故事板用于尽可能多的 UI 内容,这就是它们的用途,尽可能限制程序化 UI 内容。 【参考方案1】:

您已经构建了一个UINavigationBar 和一个UIBarButtonItem,但从未连接这两者。

UINavigationController 为您管理一个UINavigationBar 并将其设置为topItem 为导航堆栈中最顶层视图控制器的navigationItem。如果您需要构建自己的导航栏,那么您需要自己管理它的项目堆栈。看看UINavigationBar- pushNavigationItem:animated:方法。

但是,鉴于您似乎想要 UINavigationController 的外观和功能,我不清楚您为什么要自己添加 UINavigationBar 视图而不是使用该容器视图控制器。

【讨论】:

这很好。然后我将如何显示容器?除非我将它嵌入到导航控制器中,否则它不会像现在这样显示,这会导致崩溃。

以上是关于如何向 UINavigationBar 添加后退按钮?的主要内容,如果未能解决你的问题,请参考以下文章

检测长按 UINavigationItem 的后退按钮

UINavigationBar 后退按钮图标

iPhone - 使用 Interface Builder 创建一个带有后退按钮的简单 UINavigationBar

如何从情节提要中更改 UINavigationBar 标题和后退按钮颜色?

如何向 UINavigationBar 添加按钮

iPhone - 如何使用我的纹理背景自定义 UINavigationBar 后退按钮