控制 ios app 的第一個畫面

控制 ios app 的第一個畫面


Play all audios:


從 iOS 13 開始,因為 SwiftUI 的發明,我們除了從傳統的 storyboard 設計 App 的第一個畫面,也可以指定 SwiftUI 的 view 當第一個畫面。接下來就讓我們認識這兩種方法的差異吧。 以 SWIFTUI 的 VIEW 當第一個畫面 * 新增 SWIFTUI VIEW 製作第一個畫面 取名 PrinceView,步驟可參考以下連結。 新增


SWIFTUI 畫面 點選 XCODE MENU 的 FILE > NEW > FILE。(快速鍵 CMD + N) medium.com * 設計 APP 畫面。 編輯 PrinceView.swift。 struct PrinceView: View {    var body: some View {       Image(.prince)    } } *


將 SWIFTUI VIEW 設為第一個畫面。 找到檔名是 專案名 + APP 的 swift 檔,比方專案名 Demo,從 Project navigator 將看到 DemoApp.swift。 如上圖所示,在 WindowGroup { } 裡生成的畫面即為 App 的第一個畫面。預設是 ContentView,我們可將它改成任何的 SwiftUI


view,比方剛剛發明的 PrinceView。 @main struct DemoApp: App {     var body: some Scene {         WindowGroup {             PrinceView()         }     } } 以 STORYBOARD 的 CONTROLLER 當第一個畫面 * 新增


STORYBOARD 設計第一個畫面。 比方將檔名取名為 Main。 加入當第一個畫面的 controller,記得點選 controller 後勾選 Is Initial View Controller,如此開頭箭頭才會指到它。 * 設定第一個畫面的 STORYBOARD 名字 App 可以有很多 storyboard,因此我們必須告訴它誰是第一個畫面的


storyboard。切換到 Target App 的 Info 分頁,找到 Application Scene Manifest 區塊。 若是 Application Scene Manifest 區塊裡找不到 Storyboard Name,請點選 Item 0 (Default Configuration) 旁的 +,新增 Storyboard Name。 輸入


storyboard 的名字 Main。 * 編輯 FUNCTION SCENE(_:WILLCONNECTTO:OPTIONS:) 若是採用 storyboard 的 controller 當第一個畫面,function scene(_:willConnectTo:options:) 裡將不用寫任何程式,它將參考我們剛剛設定的 storyboard 名字,將


storyboard 裡箭頭指到的 controller 當成第一個畫面。 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { } 若想另外從程式指定某個 storyboard 的


controller 為第一個畫面,則可透過 storyboard 的 function instantiateInitialViewController 生成 controller ,然後將它指定為 window 的 rootViewController。 比方以下例子裡,我們將 Login.storyboard 裡開頭箭頭指到的畫面設為第一個畫面。 func scene(_


 scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {    let storyboard = UIStoryboard(name: "Login", bundle: nil)    


window?.rootViewController = storyboard.instantiateInitialViewController() } 以 XIB 的 CONTROLLER 或程式設計的 CONTROLLER 當第一個畫面 如下圖所示,控制 XibViewController.xib 的 controller 為 XibViewController。 修改


SceneDelegate.swift 的 function scene(_:willConnectTo:options:),將 window 的 rootViewController 指定為 XibViewController 或某個完全由程式設計畫面的 controller 類別。 func scene(_ scene: UIScene, willConnectTo 


session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return }         window = UIWindow(frame: 


UIScreen.main.bounds)         window?.rootViewController = XibViewController()         window?.makeKeyAndVisible()         window?.windowScene = windowScene } 若是當初建專案時選擇 storyboard,記得要取消


storyboard 的相關設定。 * 將 General 分頁下 Development Info 的 Main Interface 清空。 * 將 Info 頁面 Application Scene Manifest 下的 Storyboard Name 欄位清除。 參考連結