👻
iOSでプロジェクトからMain.storyboardを削除してRootのViewControllerをコードで生成する
iOSでプロジェクトからMain.storyboardを削除してRootのViewControllerをコードで生成する方法のメモ。
手順
-
プロジェクトから
Main.storyboard
を削除 -
Info.plist
からstoryboardに関する記述を削除
diff --git a/uikit-architecture/Info.plist b/uikit-architecture/Info.plist
index 5b531f7..2688b32 100644
--- a/uikit-architecture/Info.plist
+++ b/uikit-architecture/Info.plist
@@ -33,8 +33,6 @@
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
- <key>UISceneStoryboardFile</key>
- <string>Main</string>
</dict>
</array>
</dict>
@@ -43,8 +41,6 @@
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
- <key>UIMainStoryboardFile</key>
- <string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
-
SceneDelegate.swift
にViewControllerを生成するコードを追加
diff --git a/uikit-architecture/SceneDelegate.swift b/uikit-architecture/SceneDelegate.swift
index 73be64c..275dc67 100644
--- a/uikit-architecture/SceneDelegate.swift
+++ b/uikit-architecture/SceneDelegate.swift
@@ -16,7 +16,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
- guard let _ = (scene as? UIWindowScene) else { return }
+ guard let windowScene = (scene as? UIWindowScene) else { return }
+ window = UIWindow(frame: UIScreen.main.bounds)
+ window?.rootViewController = ViewController()
+ window?.makeKeyAndVisible()
+ window?.windowScene = windowScene
上記のプロジェクトはこちらにプッシュしてあります。
MVCやMVPなどの設計を勉強するときにこの手のプロジェクトが欲しくなります。
Discussion