2017-04-04 62 views
3

Storyboard如何從AppDelegate實例化多個視圖控制器?

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

問題是:由於我使用通用鏈接,用戶直接進入playerView播放視頻,但當他們按下完成按鈕時,應用程序崩潰。我相信的問題是因爲視圖控制器上的其餘部分未被初始化?我如何初始化容器視圖和其他視圖控制器?或者,如果這不是問題,請讓我知道問題是什麼。

下面是一些示例代碼的應用程序委託。如有可能,請提供代碼以幫助!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if let pagingViewController = window?.rootViewController as? PagingViewController { 
     pagingViewController.videoPlaybackManager = videoPlaybackManager 
    } 
    return true 
} 



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

編輯 - 我如何實例裏面PagingViewController 3級的VC(容器查看)

private func setupViewControllers() { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController 
     page1.view.translatesAutoresizingMaskIntoConstraints = false 
     page1.delegate = self 
     scrollView.addSubview(page1.view) 
     addChildViewController(page1) 
     page1.didMove(toParentViewController: self) 
     // Inject dependency. 
     page1.videoPlaybackManager = videoPlaybackManager 

     page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController 
     page2.view.translatesAutoresizingMaskIntoConstraints = false 
     page2.delegate = self 
     scrollView.addSubview(page2.view) 
     addChildViewController(page2) 
     page2.didMove(toParentViewController: self) 

     page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController 
     page3.view.translatesAutoresizingMaskIntoConstraints = false 
     scrollView.addSubview(page3.view) 
     addChildViewController(page3) 
     page3.didMove(toParentViewController: self) 
...... 
+0

你通常如何初始化Container VC?那不在'didLaunchWithOptions'中嗎? – dmorrow

+0

嘿,我只是在我的示例中添加了更多的代碼,顯示了它的完成情況。謝謝 – user7097242

+0

實際上ContainerVC正在通過故事板進行初始化。 – user7097242

回答

0

如果你正在處理UIPageViewController,設置適當的兒童UIViewController可以附加代碼:

// In PagingViewController 
func loadChildViewControllerFromUniversalLink(myParameter: Bool) { 
    // The condition you need to satisfied in order to present 
    // the correct child view controller 
    if myParameter { // is satisfied 
     let universalLinkVc = MyChildViewController() // load your VC here 
     let direction : UIPageViewControllerNavigationDirection = .forward // or .reverse, as you wish 
     self.setViewControllers([universalLinkVc], direction: direction, animated: animated, completion: nil) 
    } 
} 

然後在你的AppDelegateapplication(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool

myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true) 
+0

你好Felipe。我沒有使用UIPageViewController,而是使用一個名爲PagingViewController的VC,它用作V1,V2和V3的容器視圖。然後我在那裏實例化所有3 Vc。請看看我添加的附加代碼,如果可能,相應地修改您的代碼。謝謝您的幫助!! – user7097242

相關問題