在Xcode 12的SwiftUI项目中使用ViewRouter

堆垛机

我试图在新的Xcode 12项目中使用方法(请参阅附件)作为创建SwiftUI应用程序登录页面的方法,但是我遇到了一个问题,即不知道要向主App结构中添加什么。我仍然是一个初学者,并尝试将其添加ContentView().environmentObject(ViewRouter())到主应用程序结构中的WindowGroup中。我是完全错误的还是Xcode为什么不建立视图?有人可以帮忙吗?在工作代码段下方:

import SwiftUI
import Foundation
import Combine

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: MotherView().environmentObject(ViewRouter()))
            self.window = window
            window.makeKeyAndVisible()
        }
    }
. . .
}

class ViewRouter: ObservableObject {
    let objectWillChange = PassthroughSubject<ViewRouter,Never>()
    var currentPage: String = "page1" {
        didSet {
            withAnimation() {
                objectWillChange.send(self)
            }
        }
    }
}

struct MotherView : View {
    @EnvironmentObject var viewRouter: ViewRouter
    var body: some View {
        VStack {
            if viewRouter.currentPage == "page1" {
                ContentViewA()
            } else if viewRouter.currentPage == "page2" {
                ContentViewB()
                    .transition(.scale)
            }
        }
    }
}

struct ContentViewA : View {
    @EnvironmentObject var viewRouter: ViewRouter
    var body: some View {
        Button(action: {self.viewRouter.currentPage = "page2"}) {
            Text("Login")
        }
    }
}

struct ContentViewB : View {
    
    @EnvironmentObject var viewRouter: ViewRouter
    
    var body: some View {
        Button(action: {self.viewRouter.currentPage = "page1"}) {
            Text("Logout")
        }
    }
}

现在,我想用Xcode 12样式替换SceneDelegate,但是以下方法不起作用。知道为什么吗?

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            MotherView().environmentObject(ViewRouter())
        }
    }
}
恩尼斯·伊萨别科夫

请尝试以下步骤:

  1. 删除整个SceneDelegate类(在您的情况下,不需要SceneDelegate类)

  2. 修改您的ViewRouter类,如下所示:

    类ViewRouter:ObservableObject {@Published var currentPage:String =“ page1”}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

xcode从项目中删除存储库

来自分类Dev

在Xcode 5项目中使用Core Plot 2

来自分类Dev

如何从Xcode项目中删除未使用的图像

来自分类Dev

在xcode项目中使用Matlab功能

来自分类Dev

Xcode 5 Makefile项目中的Doxygen文档

来自分类Dev

从Xcode项目中删除空行

来自分类Dev

计算Xcode项目中的总行数

来自分类Dev

xCode删除了仍在项目中的目标

来自分类Dev

从项目中删除Pod-Xcode

来自分类Dev

从Xcode项目中完全删除测试目标

来自分类Dev

在Xcode项目中的目标之间共享数据

来自分类Dev

如何从Xcode项目中删除未使用的图像?

来自分类Dev

从Xcode项目中删除未使用的Parse框架是否安全?

来自分类Dev

从Xcode项目中删除警告

来自分类Dev

Xcode项目中的Jpeg图片报告无效

来自分类Dev

无法使用Xcode 7.3.1在我的Swift 2项目中使用“ po”检查变量-错误加载帮助程序功能

来自分类Dev

在xcode项目中使用系统调用的优缺点是什么

来自分类Dev

Xcode项目中的可编辑Swift包?

来自分类Dev

在Xcode 12中使用@main

来自分类Dev

在Xcode Swift项目中使用Objective C框架

来自分类Dev

在SwiftUI Xcode 12中无法使用Stepper

来自分类Dev

SwiftUI:在Xcode 12 / iOS 14中使用环境对象(->如何/在环境中放置对象的位置?)

来自分类Dev

使用SwiftUI,XCode 12和Catalina的新项目失败

来自分类Dev

在Flutter项目中使用Xcode中的Swift Package Manager添加依赖项时生成错误

来自分类Dev

如何在XCode的项目中删除项目?

来自分类Dev

在Xcode 5项目中使用Core Plot 2

来自分类Dev

在ApplescriptObjc Xcode项目中使用Applescript遇到麻烦

来自分类Dev

将未使用的文件保留在Xcode项目中

来自分类Dev

如何在Xcode 8.2的Playground项目中使用Swift从用户那里获取输入?

Related 相关文章

  1. 1

    xcode从项目中删除存储库

  2. 2

    在Xcode 5项目中使用Core Plot 2

  3. 3

    如何从Xcode项目中删除未使用的图像

  4. 4

    在xcode项目中使用Matlab功能

  5. 5

    Xcode 5 Makefile项目中的Doxygen文档

  6. 6

    从Xcode项目中删除空行

  7. 7

    计算Xcode项目中的总行数

  8. 8

    xCode删除了仍在项目中的目标

  9. 9

    从项目中删除Pod-Xcode

  10. 10

    从Xcode项目中完全删除测试目标

  11. 11

    在Xcode项目中的目标之间共享数据

  12. 12

    如何从Xcode项目中删除未使用的图像?

  13. 13

    从Xcode项目中删除未使用的Parse框架是否安全?

  14. 14

    从Xcode项目中删除警告

  15. 15

    Xcode项目中的Jpeg图片报告无效

  16. 16

    无法使用Xcode 7.3.1在我的Swift 2项目中使用“ po”检查变量-错误加载帮助程序功能

  17. 17

    在xcode项目中使用系统调用的优缺点是什么

  18. 18

    Xcode项目中的可编辑Swift包?

  19. 19

    在Xcode 12中使用@main

  20. 20

    在Xcode Swift项目中使用Objective C框架

  21. 21

    在SwiftUI Xcode 12中无法使用Stepper

  22. 22

    SwiftUI:在Xcode 12 / iOS 14中使用环境对象(->如何/在环境中放置对象的位置?)

  23. 23

    使用SwiftUI,XCode 12和Catalina的新项目失败

  24. 24

    在Flutter项目中使用Xcode中的Swift Package Manager添加依赖项时生成错误

  25. 25

    如何在XCode的项目中删除项目?

  26. 26

    在Xcode 5项目中使用Core Plot 2

  27. 27

    在ApplescriptObjc Xcode项目中使用Applescript遇到麻烦

  28. 28

    将未使用的文件保留在Xcode项目中

  29. 29

    如何在Xcode 8.2的Playground项目中使用Swift从用户那里获取输入?

热门标签

归档