2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOS13 SceneDelegateが導入され、Push遷移につまづいた時の解決策

Posted at

はじめに

久々にアプリを0から作り始めたところ、何やらSceneDelegate.swiftが自動生成され、AppDelegateのライフサイクル関数群が移動したことにより、AppDelegateがすっきりした印象を受けた。

開発し初め早々につまづいたのですが、Main画面(Main.Stroryboard)から Push遷移 ができない事件が発生...
普段つまづくことのない部分のため問題解決に時間がかかってしまいましたので、
もし同じようなことでつまづいていましたら、参考にしていただけたらと思います。

本題

スクリーンショット 2020-01-26 19.13.52.png

<解決したい内容>

ボタンを押して、コードから ExamViewController へPush遷移をしたい

<現状>

スクリーン内の「Button」をタップすると、tapButton関数が呼び出されます。
ストリーボード名「Exam」、StoryboardID「Exam」で定義されている、 ExamViewController をインスタンス化しており、ここまでは問題がない。
Push関数を実行してもPush遷移が行われない。

<解決方法>

SceneDelegate.swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let _ = (scene as? UIWindowScene) else { return }
        
        self.window?.rootViewController = createFirstViewController() // <- 新規追加
        self.window?.makeKeyAndVisible() // <- 新規追加
    }

// 途中省略 ----

extension SceneDelegate { // <- 新規追加 & createFirstViewController関数作成
    
    func createFirstViewController() -> UINavigationController {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateInitialViewController() as! ViewController
        
        let navigationController = UINavigationController()
        navigationController.view.backgroundColor = .white
        let firstViewController = viewController
        navigationController.viewControllers = [firstViewController]
        navigationController.setNavigationBarHidden(true, animated: false)
        return navigationController
    }

}

MainのViewController配下に、NavigationControllerが定義されていないため、このような現象が起きていた。
上記のコードを SceneDelegate.swift 内に追加してあげることで、問題解決!

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?