我创建了一个表格视图,并说用户按下了一个单元格,它将转到ListTavleView
,但是现在唯一的问题是,每当用户在ListTableView中时,都没有后退按钮,甚至认为我已经嵌入导航控制器
我希望拳头导航栏为小标题,第二视图导航栏为大标题
下面是我的代码
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设置
没有后退按钮的导航栏
答案 0 :(得分:3)
从图中可以看出,视图控制器似乎是作为当前视图控制器中的子视图控制器添加的。
按下某个单元格时不需要嵌入式导航控制器,因为在起点处已经有一个导航控制器,因此无需创建新的导航控制器。(如果显示视图控制器,则可能需要嵌入导航控制器)
所以解决方案是...
答案 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