2017-04-04 11 views
0

は、私は私のアプリでは次のセットアップを持っている: Storyboard setupAppDelegateからUIViewControllerをインスタンス化する方法は?

は3つのビューコントローラ(A、BおよびC)を保持するコンテナのビューがあります。私は左または右にスワイプすることでA、BまたはCから切り替えることができます。 AまたはBの両方に独自のコレクションビューが含まれています。 AまたはB内のコレクションビューの任意のセルをタップすると、PlayerVC(上記の図のPlayerが^^)が起動し、ビデオはAVPlayerを使用して再生を開始します。

問題がある:

  • このアプリは、ユーザーがuniversal link上でタップしたときにそうUniversal Linksを共有することができ、それは、アプリに直接それらを取るPlayerVCを起動し、ビデオの再生を開始します。問題は、ユーザーがuniversal linkをタップした場合にPlayerVCに直接移動した場合、他のView Controllerをどのように初期化するのですか?またはPlayerVCにアクセスする方法をapp delegateからですか?ここで

いくつかのシナリオです:

  • 彼らはPlayerVCアプリのクラッシュを閉じた場合、ユーザは、その後、PlayerVCに直接取られている場合。
  • アプリが既に起動していてバックグラウンドモードの場合、ユーザーがview controller Bであったとしたら、ユーザーがuniversal linkをタップすると、view controller BからPlayerVCに移動するにはどうすればよいですか?

これはuniversal linkは、ユーザ(HELPコメントを何卒ご了承下さい)でタップしたときに呼び出されるapp delegateでデリゲートメソッドです:

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を実行しています。ユニバーサルリンク用の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

関連する問題