添加导航栏,但没有后退按钮

时间:2018-06-19 11:34:29

标签: ios swift tableview

我创建了一个表格视图,并说用户按下了一个单元格,它将转到ListTavleView,但是现在唯一的问题是,每当用户在ListTableView中时,都没有后退按钮,甚至认为我已经嵌入导航控制器

我希望拳头导航栏为小标题,第二视图导航栏为大标题

enter image description here

下面是我的代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showList" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let items = dataManager.items[indexPath.row]
            let controller = (segue.destination as! UINavigationController).topViewController as! ListTableViewController
            controller.item = items
            controller.navigationItem.leftItemsSupplementBackButton = true
        }
    }
}

以下是我的Storybord设置

enter image description here

没有后退按钮的导航栏

enter image description here

4 个答案:

答案 0 :(得分:3)

从图中可以看出,视图控制器似乎是作为当前视图控制器中的子视图控制器添加的。

按下某个单元格时不需要嵌入式导航控制器,因为在起点处已经有一个导航控制器,因此无需创建新的导航控制器。(如果显示视图控制器,则可能需要嵌入导航控制器)

所以解决方案是...

  • 删除导航控制器。

enter image description here

  • 直接连接到目标视图控制器,而无需导航控制器。

enter image description here

答案 1 :(得分:1)

如果使用pushViewController更好,只是获取另一个视图控制器的引用,它总是一个后退按钮,因为您要推动导航控制器,这是一个简单的示例:

NSString *yourString = "your text";
NSMutableAttributedString *ms = [[NSMutableAttributedString alloc] initWithString:yourString];
[ms addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:40] range:NSMakeRange(0, yourString.length)];

关于后退按钮,问题出在您的层次结构上。 您是否正在更改另一个视图控制器中导航栏的左侧项目,而这可能会影响目标视图控制器中的导航栏。

答案 2 :(得分:0)

如果要在下一个视图上具有导航栏后退按钮,则只需在导航上按目标视图,它将显示默认的导航后退按钮。不,需要任何额外的工作。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showList" {
  if let indexPath = tableView.indexPathForSelectedRow {
    let items = dataManager.items[indexPath.row]

    guard let controller = segue.destination as? ListTableViewController else {
      return
    }
    controller.item = items
    self.navigationController?.pushViewController(controller, animated: true)
  }
}}

如果您使用segue推送视图控制器,则无需在行self.navigationController?.pushViewController(controller, animated: true)下添加

答案 3 :(得分:0)

您正在将新的NavigationController(例如Nav.B)推向现有的(Nav.A)。

每个导航控制器保留不同的导航堆栈。将viewcontroller添加到Navigation controller时,后退按钮可见。进一步了解UINavigationController

对于您当前的情况,您可以删除第二个导航控制器(我认为这不是必需的)并将直接Segue连接到ListTableViewController

所以

let controller = (segue.destination as! UINavigationController).topViewController as! ListTableViewController

成为

let controller = segue.destination as! ListTableViewController

当您需要较大的标题(11种以上可用)时,可以在viewDidLoad()中添加此行

navigationController?.navigationBar.prefersLargeTitles = true

如果只需要此Viewcontroller,则添加viewWillDisappear()viewDidDisappear()

navigationController?.navigationBar.prefersLargeTitles = false