1. ホーム
  2. ios

swiftを使ったアプリデリゲートからのビューコントローラのオープン

2023-08-05 18:29:10

質問

プッシュ通知で取得した情報に応じて、どのビューを開くかを決定するプッシュ通知を作成しようとしています。

プッシュから情報を取得することはできましたが、開くビューを決定するのに苦労しています。

他のスタックオーバーフローの質問を見て、私は現在次のようなものを持っています。

App Delegate ロードが終了しました。

     //Extract the notification data
    if let notificationPayload = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {
        // Get which page to open
        let viewload = notificationPayload["view"] as? NSString
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        //Load correct view
        if viewload == "circles" {

            var viewController = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier("Circles") as! UIViewController
            self.window?.rootViewController = viewController

                        }
    }

現在、var ViewController = self...の行で失敗しています。

どのように解決するのですか?

ViewControllerのStoryBoardIdプロパティを下図のように設定する必要があります。

swiftで以下のようなコーディングでviewControllerを開きます。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

         let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
         let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Circles") as UIViewController
         self.window = UIWindow(frame: UIScreen.main.bounds)
         self.window?.rootViewController = initialViewControlleripad
         self.window?.makeKeyAndVisible()

         return true
    }

iOS 13+ 用 (ベースは dev2qa さんの記事 )

開く SceneDelegate.swift を開き、以下を追加します。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    // If this scene's self.window is nil then set a new UIWindow object to it.
    self.window = self.window ?? UIWindow()

    // Set this scene's window's background color.
    self.window!.backgroundColor = UIColor.red

    // Create a ViewController object and set it as the scene's window's root view controller.
    self.window!.rootViewController = ViewController()

    // Make this scene's window be visible.
    self.window!.makeKeyAndVisible()

    guard scene is UIWindowScene else { return }
}

オープンソースの ナビゲーションユーティリティ があり、これをより簡単にすることを試みています。