在tabBar上设置isUserInteractionEnabled第一次没有工作

时间:2017-08-25 01:36:24

标签: ios swift

如果我有一个UITabBarController并在其中一个视图控制器中执行此操作:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    tabBarController?.tabBar.isUserInteractionEnabled = false
}

第一次显示时,我仍然可以更改标签。

如果我点击另一个标签并点按第一个标签页,则标签栏确实已停用,但不是第一次。

为什么呢?我该如何解决这个问题?

编辑:

我注意到有一个细节,tabBarController?.tabBar.isUserInteractionEnabled = false必须位于导航控制器的第二个视图控制器上。换句话说:

说我有那个结构

UITabBarController
    UINavigationController
        UIViewController (1)
        UIViewController (2)
    UIViewController (3)

因此,如果我在视图控制器viewDidAppear上添加(2)代码,您可以更改一次,但不是第二次(显然是在导航到它之后)。

还有更多,如果我在浏览控制器(2)之后返回,则标签栏变为"可互动"再次,我没有将其设置为true

2 个答案:

答案 0 :(得分:1)

虽然我遇到了同样的行为:

tabBarController?.tabBar.isUserInteractionEnabled = false

..你可以做的是禁用tabBar.items集合中的每个项目,然后在另一个控制器的viewWillAppear方法中重新启用它们。例如,如果您不想让用户在菜单#1中跳出菜单,那么您可以在后续控制器中执行以下操作:

override func viewWillAppear(_ animated: Bool) {
    //0th tab items remains enabled as "only choice" for user
    self.tabBarController!.tabBar.items![1].isEnabled = false
    self.tabBarController!.tabBar.items![2].isEnabled = false
    self.tabBarController!.tabBar.items![3].isEnabled = false
    self.tabBarController!.tabBar.items![4].isEnabled = false 

}

当用户选中回到第一个标签(0)(或点击后退按钮)时,在该viewController的viewWillAppear方法中,重新启用项目:

    override func viewWillAppear(_ animated: Bool) {
    //re-enable tab items
    self.tabBarController!.tabBar.items![1].isEnabled = true
    self.tabBarController!.tabBar.items![2].isEnabled = true
    self.tabBarController!.tabBar.items![3].isEnabled = true
    self.tabBarController!.tabBar.items![4].isEnabled = true 

}

答案 1 :(得分:0)

在视图中显示标签栏但无法与其进行交互可能会让用户感到困惑和沮丧。虽然我没有原始问题的原因或解决方案,但我有另一种建议:

  

隐藏UIViewController (2) 中的标签栏:

override func viewDidLoad() {
    super.viewDidLoad()
    tabBarController?.tabBar.isHidden = true
}
     

我们将其放在viewDidLoad中,以便视图一旦隐藏   出现。

这还要求您在 UIViewController (1) 中明确取消隐藏,以便用户点击后退按钮。在viewWillAppear中执行它,因为视图已经加载,我们将返回它。

override func viewWillAppear(_ animated: Bool) {
    tabBarController?.tabBar.isHidden = false
}