Как установить начальный вид контроллера для swiftUI - PullRequest
1 голос
/ 25 февраля 2020

Обычно я использую раскадровку, чтобы установить контроллер представления в качестве начального контроллера представления, щелкая в инспекторе атрибутов.

Как установить начальный контроллер представления в интерфейсе Swift?

Информация о системе: Swift 5, Xcode 11.3.1.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2020

В SceneDelegate.swift

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    let contentView = ContentView().environment(\.managedObjectContext, context)

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: contentView)
        self.window = window
        window.makeKeyAndVisible()
    }
}

измените строку let contentView = ContentView()... на YourInitialView()...

Результат должен выглядеть следующим образом

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // change this line to your initial view controller class name
    let contentView = YourInitalView().environment(\.managedObjectContext, context)
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: contentView)
        self.window = window
        window.makeKeyAndVisible()
    }
}
0 голосов
/ 25 февраля 2020

Вы не можете использовать UIViewController с SwiftUI, в SwiftUI представления являются структурными.

Шаг для изменения начального представления в SwiftUI

  1. Открыть SceneDelegate (Not AppDelegate)
  2. Upate scene (_ scene: UIScene, willConnectTo session: UISceneSession, параметры connectionOptions: UIScene.ConnectionOptions) fun c как показано ниже
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let contentView = SignInInputView()

        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }

, где SignInInputView является Stuct, как показано ниже

struct SignInInputView: View {
    @State private var userNameString: String = ""
    @State private var passwordString: String = ""
    var body: some View {

        HStack {
            Spacer(minLength: 20)
            VStack(alignment: .leading, spacing: 20) {
                TextField("Enter UserName/Password", text: $userNameString, onEditingChanged: { (value) in
                    print(value)
                }, onCommit: {
                    print(self.userNameString)
                }).frame(height: 60)
                    .padding([.leading, .trailing], 20)
                    .background(Color.red)

                TextField("Enter Password", text: $passwordString, onEditingChanged: { (value) in
                    print(value)
                }, onCommit: {
                    print(self.passwordString)
                }).frame(height: 60)
                    .padding([.leading, .trailing], 20)
                    .background(Color.green)
            }
            Spacer(minLength: 20)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...