[英]Get ViewController from Appdelegate
我的故事板中有四个视图
在我的ViewTwo
,我打电话并打开一个新的应用程序,当URL打开完成后,我在Appdelegate
调用以下函数
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
我在这里所做的是,我要遍历所有viewControllers,因为我想找到ViewTwo
以便能够调用我创建的segue。 我想这样做,因为我不想创建viewController的新实例。
通过下面的此功能可以很好地找到ViewTwo
:
if let viewControllers = window?.rootViewController?.childViewControllers {
for viewController in viewControllers {
if viewController.isKindOfClass(ViewTwo) {
viewController.performSegueWithIdentifier("sw", sender: self)
}
}
}
但是现在我已经向ViewTwo
, ViewThree
和ViewFour
添加了NavigationController
,因此当我运行上面的代码片段时,我只会得到viewController的以下结果(我做了一个简单的print(viewController)
)
<ViewOne: 0x...>
<UINavigationController: 0x...>
<UINavigationController: 0x...>
<UINavigationController: 0x...>
所以我的问题是,既然我也有NavigationController,如何检查ViewTwo?
我解决了
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("ViewThree") as! WebViewController
self.window?.rootViewController!.presentViewController(controller, animated: true, completion: { () -> Void in
})
您可以从情节提要中获取视图控制器,而无需创建新实例。 您不需要遍历所有视图控制器。 另外,为什么不将视图控制器设置为导航控制器的根目录而不是执行segue?
您可以从情节提要中获取视图控制器,如下所示:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("ViewTwo") as! ViewTwoViewController
因为现在您都可以使用UINavigationViewController
。 它仅仅是控制器的控制器。 您可以通过访问viewControllers
属性的第一个元素,从UINavigationViewController
访问根视图控制器。 然后,您可以进行插值。
根视图控制器位于数组的索引0中,后视图控制器位于索引n-2处,而顶部控制器位于索引n-1中,其中n是数组中的项数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.