在导航栏中自动添加“返回”按钮

时间:2019-04-10 15:40:25

标签: ios swift uinavigationbar back-button uinavigationitem

首先:我将Swift 5与Xcode 10(iOS 12.0)结合使用。

我对Swift / iOS开发还很陌生,并且观看了一些视频,了解如何在导航栏中添加“后退”按钮。在所有这些工具中(使用Swift 3),在添加了segue(在第一个场景的项目和第二个场景的项目之间)和两个导航栏的标题之后,一旦运行该应用程序,按钮就会神奇地出现。

我的应用有三个ViewController /场景:

  1. 不使用导航栏登录(“登录”按钮:转到场景2)
  2. Table View(通过segue链接到场景3,因此我只需点击列表中的一个项目即可)
  3. “表格视图”中单个项目的更多信息

场景2和3之间的顺序设置为“显示(例如,推送)”,因为“推”已弃用,导致应用崩溃。

我将两个导航栏都手动添加到了导航控制器(2和3),并想将箭头图标添加到场景3的导航栏中。到目前为止,我已经尝试过:

  • 在两个场景中为导航栏添加标题
  • 设置“后退按钮”属性(导航栏文本),该属性创建了子对象
  • 然后设置子对象的“图片”属性
  • 将“后退”和“后遮罩”属性(导航栏)设置为同一图像

但是,无论是在Xcode中还是在模拟器中都没有任何显示(甚至没有图像)。

是否仍然有可能获得自动的“后退”按钮,或者您现在是否必须使用“条形按钮项”自己添加它?

2 个答案:

答案 0 :(得分:0)

因此,当您show像v2,v3这样的View Controller时,这些View Controller不再与v1处于同一导航堆栈中,这就是为什么它不会自动显示后退按钮的原因。

我不知道为什么不赞成您使用Push函数,但是如果您可以抓取屏幕截图,也许我可以为您提供一个理由。我正在使用Swift5,并且可以使用以下命令:self.navigationController?.pushViewController(vc, animated: true)

要回答您的问题,如果要向v2,v3添加后退按钮,则必须使用BarButtonItem,然后调用 self.dismiss(viewController, true)我强烈建议您不要这样做,如果您打算将它们与v1放在同一导航堆栈中。

答案 1 :(得分:0)

回答我自己的问题:是的,仍然有可能(Xcode 10 / Swift 5)使其自动添加“后退”按钮。

Push自iOS 8起就不再使用,所以请改用Show (e.g. Push)

通常情况下,Show (e.g. Push)使用Show,但是如果当前NavigationController的左边(场景从左到右)有ViewController,它将自动使用Push,它还会在下一个场景的NavigationBar中添加一个“后退”按钮,或者,如果没有NavigationBar,则只需将该按钮添加到通常位于该位置的按钮上即可。

我的场景现在看起来像这样:

  1. ViewController1:不使用NavigationBar登录(“登录”按钮:选择NavigationController
  2. NavigationController:自动搜索到新的UITableViewController(如果通过库添加了)
  3. ViewController2:表格视图(通过segue链接到4。)
  4. ViewController3:单个项目的更多信息

将数据添加到1.和3.之间的序列中(使用2.)与使用NavigationController的情况稍有不同:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let navC = segue.destination as? UINavigationController
    let vc2 = navC?.viewControllers.first as! ViewController2
    vc2.myinformation = myinfosArray
}

(Bad)NavigationController的替代选择:

添加一个NavigationBar和一个BarButtonItem并将其链接到上一个视图,就像使用其他任何按钮一样。

缺点:切换到下一个视图后,该视图(在我的情况下为“ ViewController2”)会重置(因为两个视图不在同一堆栈中,请参见上面jaelee的说明),因此如果要返回,则必须重新设置所有内容。