以编程方式更改视图

时间:2016-12-02 16:37:47

标签: swift uinavigationcontroller uitabbarcontroller

我知道有很多关于此的帖子,但我的问题有点不同。我有一个带多个视图的标签栏控制器,其中一个视图是登录视图,如果用户登录它应该更改视图以显示用户菜单。

同时我需要保持Tab Bar菜单可见,所以我不能使用modal,因为它会松开对Tab Bar Controller的引用。

所以我最终使用导航控制器,我只是将用户菜单视图推入堆栈(不是最好的方式,但它的工作原理)。

问题是,如果用户双击登录栏,它将加载登录视图,我不希望这种情况发生。

enter image description here

在此示例中,如果用户单击“登录”按钮,则会转到“蓝色”视图,但如果用户双击“选项卡栏”菜单上的“功能”按钮,则会转到红色视图。

由于我的解决方案不起作用,我怎样才能实现我想要的?如果用户按下“登录”按钮,它将仅显示蓝色视图,直到他按下“注销”按钮。

[编辑]

以下是显示蓝色视图的代码:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let ViewController = storyBoard.instantiateViewController(withIdentifier: "userViewID") as! UserViewController
                    self.navigationController?.pushViewController(ViewController, animated: true)

1 个答案:

答案 0 :(得分:1)

好的,我最后检查导航控制器是否有多个孩子(红色的孩子)并从导航阵列中移除第一个孩子,这样就可以解除它并只显示我想要的孩子。

 override func viewWillAppear(_ animated: Bool) {

        if((self.navigationController?.viewControllers.count)! > 1)
        {
            self.navigationController?.viewControllers.removeFirst()
        }
    }

我最终这样做的原因是因为在Tab Bar项目上单击2x它会将我带到红色视图,即使我已经将蓝色视图推送到导航阵列。