UINavigationController仅在第二次出现视图时隐藏按钮

时间:2015-02-22 22:27:15

标签: ios iphone swift uinavigationcontroller back

我有三个视图控制器:登录视图,主桌面视图屏幕和详细的tableview屏幕。这些都是同一个UINavigationController的一部分。在主屏幕上,我想禁用后退按钮,阻止用户进入登录屏幕。所以我有viewDidLoad()函数

// Home View
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = true
    ...
}

当此视图显示时,没有后退箭头但是有一个单词" Back。"此按钮不执行任何操作,似乎已禁用。当我转到下一个视图(详细视图)时,后退按钮被隐藏。即使我向此视图的hidesBackButton = false添加viewDidLoad,仍然没有。但是,导航栏右侧的滑动允许返回。

现在我回到了主屏幕,后退按钮完全隐藏了。如果我再向前进入详细视图,则会根据需要显示后退按钮。

以下是事件顺序:

  1. 登录屏幕。登录后,弹出主屏幕。
  2. First Login Screen

    1. 主屏幕。后退按钮就在那里,它不应该在那里。
    2. Back Button appears without arrow

      1. 详细视图。该视图应该有一个后退按钮返回主屏幕。滑动功能仍然有效,因此您可以通过滑动导航栏返回主屏幕。
      2. Detail Test View. Should have Back button

        1. 当你回去时,后退按钮消失了!就像它应该的那样。
        2. Back To Home.

          1. 最后,返回(前进)到详细视图,后退按钮就在那里。
          2. Back to Detail

3 个答案:

答案 0 :(得分:2)

在模拟器上我重置了内容和设置,这似乎解决了这个问题。

我仍然不知道为什么错误发生在第一位。

真正的解决方案

This解决方案实际上似乎对我有用!

我只是添加了

var HVC = segue.destinationViewController as! HomeViewController
HVC.navigationItem.setHidesBackButton(true, animated: false)

创建有问题VC的ViewController中的prepareForSegue方法。

答案 1 :(得分:0)

尝试添加此内容:

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton

答案 2 :(得分:0)

我遇到了与上面描述的相同的问题,我的解决方案是使用:

self.navigationItem.setHidesBackButton(true, animated: false)

in

override func viewDidAppear { ... }

当我在viewDidLoad中使用setHidesBackButton代码时,我得到了同样的确切错误,但是如上所述移动它就可以了![/ p>