2017-04-04 81 views
0

我在我的應用中的以下設置: Storyboard setup如何從AppDelegate實例化UIViewController?

有保持3個視圖控制器(A,B和C)的容器圖。我可以通過向左或向右滑動來從A,B或C切換。 A或B都包含它們自己的集合視圖。如果點擊A或B內的收藏視圖中的任何單元格,PlayerVC(上圖中的名爲Player的播放器)將啓動,並且視頻開始使用AVPlayer播放。

的問題是:

  • 這個程序是能夠分享Universal Links所以當用戶點擊一個universal link,它直接將他們的應用程序,啓動PlayerVC,並開始播放視頻。問題是如何初始化其他視圖控制器,如果用戶被直接帶到PlayerVC,如果他們點擊universal link?或者如何從app delegatePlayerVC

這裏是一些假設:

  • 如果用戶直接帶到PlayerVC,那麼如果他們解僱PlayerVC應用程序崩潰。
  • 如果應用程序已經啓動,但在後臺模式下,假設用戶在view controller B,那麼當用戶點擊universal link時,我該如何從view controller BPlayerVC

這是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 
    } 
} 

注: 我們的應用程序在運行iOS的10。我們正在爲Universal Links使用Apple的新api:https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

有什麼想法?

回答

0

的問題是:

這個程序是可以共享通用鏈接,這樣當用戶點擊一個 通用鏈路上,需要他們直接到應用程序,啓動 PlayerVC,並開始打視頻。問題是如果我們 初始化其他視圖控制器,如果用戶被直接帶到 PlayerVC,如果他們點擊一個通用鏈接?或如何從應用程序代理到 PlayerVC?

對於這個問題,你需要先初始化容器及其子視圖控制器,那麼你就可以顯示PlayerVC

如果用戶直接帶到PlayerVC,那麼如果他們解僱 PlayerVC應用程序崩潰。

隨着我告訴你的實現,它不應該崩潰。總有會是一個容器控制器實例

如果應用程序已經啓動,但在後臺模式,讓我們假設 用戶在視圖控制器B,那麼當用戶點擊一個普遍 鏈接,怎麼辦我從視圖控制器B到PlayerVC?

您可以在您的AppDelegate中存儲容器控制器的全局變量。有了這個,你可以訪問控制器B.那麼你可以打電話

container.present(playerVC, animated: true, completion: nil) 
+0

嘿謝謝你的意見。基於我的問題,我將如何去實例化容器及其子視圖控制器?你能提供一個代碼示例嗎?謝謝 – JEL