[英]How to instantiate a UIViewController from AppDelegate?
有一個容器視圖,其中包含3個視圖控制器(A,B和C)。 我可以通過向左或向右滑動來從A,B或C切換。 A或B都包含自己的集合視圖。 如果我在A或B內的集合視圖中點擊任何單元格,則會啟動PlayerVC(在上圖中的^^命名為Player),然后開始使用AVPlayer
播放視頻。
問題是:
Universal Links
因此,當用戶點擊universal link
,它將直接將其帶到應用程序,啟動PlayerVC
並開始播放視頻。 問題是,如果用戶點擊universal link
直接將他們帶到PlayerVC
我如何初始化其他視圖控制器? 還是如何從app delegate
獲取PlayerVC
? 以下是一些方案:
PlayerVC
,那么如果他們關閉了PlayerVC
則應用程序將崩潰。 view controller B
,那么當用戶點擊universal link
,如何從view controller B
轉到PlayerVC
? 這是app delegate
中的委托方法,當用戶點擊universal link
時會調用該方法(請注意HELP
注釋):
class AppDelegate: UIResponder, UIApplicationDelegate {
// Other App Delegate methods.....
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
// 1) Make sure the passed `user activity` has expected characteristics.
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
return false
}
// HELP: I need to get to `PlayerVC` from here?
return true
// If we can't do the above we default to opening the page in safari
}
}
注意:我們的應用程序運行的是iOS10。我們將Apple的新API用於通用鏈接: https : //developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html
有什么想法嗎?
問題是:
該應用程序可以共享通用鏈接,因此當用戶點擊通用鏈接時,它將直接將其帶到該應用程序,啟動PlayerVC,然后開始播放視頻。 問題是,如果用戶點擊通用鏈接直接將他們帶到PlayerVC,我如何初始化其他視圖控制器? 還是如何從應用程序委托獲取PlayerVC?
對於此問題,您需要首先實例化容器及其子視圖控制器,然后可以顯示PlayerVC
如果將用戶直接帶到PlayerVC,則如果他們關閉了PlayerVC,則應用程序將崩潰。
使用我告訴您的實現,它不會崩潰。 總是會有一個實例化的容器控制器
如果該應用已經啟動但處於后台模式,則假設用戶在視圖控制器B中,那么當用戶點擊通用鏈接時,如何從視圖控制器B轉到PlayerVC?
您可以在您的AppDelegate中存儲容器控制器的全局變量。 這樣您就可以訪問控制器B。然后您可以呼叫
container.present(playerVC, animated: true, completion: nil)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.