[英]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.