我知道有很多关于此的帖子,但我的问题有点不同。我有一个带多个视图的标签栏控制器,其中一个视图是登录视图,如果用户登录它应该更改视图以显示用户菜单。
同时我需要保持Tab Bar菜单可见,所以我不能使用modal,因为它会松开对Tab Bar Controller的引用。
所以我最终使用导航控制器,我只是将用户菜单视图推入堆栈(不是最好的方式,但它的工作原理)。
问题是,如果用户双击登录栏,它将加载登录视图,我不希望这种情况发生。
在此示例中,如果用户单击“登录”按钮,则会转到“蓝色”视图,但如果用户双击“选项卡栏”菜单上的“功能”按钮,则会转到红色视图。
由于我的解决方案不起作用,我怎样才能实现我想要的?如果用户按下“登录”按钮,它将仅显示蓝色视图,直到他按下“注销”按钮。
[编辑]
以下是显示蓝色视图的代码:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let ViewController = storyBoard.instantiateViewController(withIdentifier: "userViewID") as! UserViewController
self.navigationController?.pushViewController(ViewController, animated: true)
答案 0 :(得分:1)
好的,我最后检查导航控制器是否有多个孩子(红色的孩子)并从导航阵列中移除第一个孩子,这样就可以解除它并只显示我想要的孩子。
override func viewWillAppear(_ animated: Bool) {
if((self.navigationController?.viewControllers.count)! > 1)
{
self.navigationController?.viewControllers.removeFirst()
}
}
我最终这样做的原因是因为在Tab Bar项目上单击2x它会将我带到红色视图,即使我已经将蓝色视图推送到导航阵列。