我的应用程序具有与此类似的结构:
当我第一次运行应用程序时,它会像这样通过VC:
LoadingVC > LoginVC > NavBarController_1 > VC1_1 > VC1_2 > NavBarController_2 > VC2_1 > VC2_2 > TabBarController_1 > NavBarController_3 > VC3_1_1
然而,当它第二次运行应用程序时,它将直接转到LoginVC > TabBarController_1 > NavBarController_3 > VC3_1_1
。
从这里我希望能够去VC1_1和NavBarController_1> VC1_1和NavBarController_2>汉堡包菜单中的VC2_1。
我的LoginVC看起来像这样:
if( CONDITION_1 == true )
{
performSegue(withIdentifier: "loginVCToNavBarController_1", sender: self)
}
else if( CONDITION_2 == true )
{
performSegue(withIdentifier: "loginVCToNavBarController_2", sender: self)
}
else
{
performSegue(withIdentifier: "loginVCToTabBarController_1", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
print("LoginVC > prepareForSegue")
if(segue.identifier == "loginVCToNavBarController_1")
{
_ = (segue.destination as! NavBarController_1)
}
else if(segue.identifier == "loginVCToNavBarController_2")
{
_ = (segue.destination as! LoginUserVC)
}
else if(segue.identifier == "loginVCToTabBarController_1")
{
_ = (segue.destination as! TabBarController_1)
}
}
我仍然想弄清楚unwindSegues是如何工作的,所以这里是我的问题/问题:
予。当我在TabBarController_1中时,取决于应用程序流的方式,VC1_1和/或VC2_1可能已经初始化,所以我想知道何时应该执行正常的segue以及何时执行unwindSegue。
请记住,unwindSegue并不总是从一个VC到同一个导航控制器下的另一个VC,但主要是从一个VC到另一个NavBarController的根目录。
现在我可以想到两种方法:检查VC是否已初始化或者是否可以使用shouldPerformSegueWithIdentifier进行segue,但我似乎无法找到一些示例(或者我可能是没有找到正确的事情。)
我做了一些挖掘并找到了shouldPerformSegueWithIdentifier,但我不确定应该如何使用它。 根据Apple的说法,如果应该执行segue,那么shouldPerformSegueWithIdentifier会返回YES,如果应该忽略它,则返回NO。
不幸的是,我似乎无法了解条件是如何得到验证的。此外,如果我尝试print(self.shouldPerformSegue(withIdentifier: "unwindFromSideMenuVCToLoginUserVC", sender: self))
,它总是返回TRUE。事实上,即使我使用segueIdentifier作为不存在的segue,它也会返回TRUE。
II。我已经有一个unwindSegue用于注销操作,但在这种情况下我知道LoginVC总是存在,因为我被迫通过它。
@IBAction func unwindFromSideMenuVCToLoginUserVC(segue:UIStoryboardSegue) { }
然而,在这种情况下,如果不是关闭应用程序,我再次登录,请使用普通的segue或unwindSegue? 或者我应该解雇所有控制器并返回root:
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
在这种情况下,它将带我到LoadingVC,然后推送LoginVC。
有任何想法/建议吗?
答案 0 :(得分:0)
UIViewController 具有名为 isViewLoaded 的属性,您可以使用它
例如
if vc.isViewLoaded {
// perform segue
}
var isViewLoaded:Bool {get}
描述: 一个布尔值,指示当前是否加载了视图 记忆。当视图在内存中时,此属性的值为true 如果不是,则为假。访问此属性不会尝试 加载视图,如果它当前不在内存中。