如何在SwiftUI视图中进行导航控制

学习者101

该代码在内部可以正常工作UIViewController

let hostingController = UIHostingController(rootView: homeMainView())
self.navigationController?.pushViewController(hostingController, animated: true)

但是现在我想在SwiftUI中以这种方式使用它:

struct AppRootView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("App").bold()
                .font(.largeTitle)
        }.onAppear(perform: handleSignIn)
            .frame(minWidth: 0,
                   maxWidth: .infinity,
                   minHeight: 0,
                   maxHeight: .infinity).background(Color.yellow)
    }

    func handleSignIn() {
        if let _ = app.currentUser() {
            print("user is logged in")

            let hostingController = UIHostingController(rootView: homeMainView())
            self.navigationController?.pushViewController(hostingController, animated: true)

        } else {
            print("not logged in; present sign in/signup view")
        }
    }
}

在SwiftUI视图中启动新视图的最佳方法是什么?

上面的代码抛出错误:

类型“ AppRootView”的值没有成员“ navigationController”

pawello2222

您可以使用来显示您的视图NavigationLink

如果NavigationLink在后台isLinkActive登录,请在后台添加一个空白,并进行设置。您还需要将所有内容都包装在其中NavigationView

struct AppRootView: View {
    @State var isLinkActive = false // <- add here

    var body: some View {
        NavigationView { // <- wrap in the `NavigationView`
            VStack(alignment: .leading) {
                Text("App")
                    .bold()
                    .font(.largeTitle)
            }
            .navigationBarTitle("", displayMode: .inline) // optionally set title
            .navigationBarHidden(true)
            .background( // add a hidden `NavigationLink` in the background
                NavigationLink(destination: homeMainView(), isActive: $isLinkActive) {
                    EmptyView()
                }
                .hidden()
            )
        }
        .onAppear(perform: handleSignIn)
        .frame(minWidth: 0,
               maxWidth: .infinity,
               minHeight: 0,
               maxHeight: .infinity).background(Color.yellow)
    }

    func handleSignIn() {
        if let _ = app.currentUser() {
            isLinkActive = true // <- activate the `NavigationLink`
        } else {
            print("not logged in; present sign in/signup view")
        }
    }
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在多个文本视图中进行输入?

如何在导航视图中取消选中已选中的项目?

如何在列表视图中选择多个单选按钮并使用其位置在arraylist中进行排列

如何在导航视图中放置菜单项?

如何在Google VR视图中导航?

如何在移动视图中修复页脚?页脚在移动视图中进入整个页面

如何在基于类的视图中进行订购

如何在基于React Function的视图中进行API调用

SwiftUI:如何在SwiftUI视图中取消计时器?

如何在React Native Expo中进行嵌套导航

如何在单个Django视图中进行两个或更多AJAX调用

如何在swiftui中的按钮操作之间在视图控制器之间导航?

如何在视图中将空文本数组传递到控制器以在Rails中进行更新?

如何在MVC Razor视图中进行AJAX调用?

如何在导航标题视图中居中显示文本

如何在标题中进行自定义导航

模态视图中的导航控制器

如何在许多视图中显示相同的导航栏?

Xcode 5:如果表格视图处于编辑模式,如何从表格视图中进行选择?

如何从控制器访问模型数据以在Ember的视图中进行渲染?

如何在MVC剃刀视图中进行服务器控制

Rails:如何在不同的视图中进行小的更改

如何在 angular2+ 的模板视图中进行嵌套循环

如何在 Django 视图中进行 url 编码

如何在 magento 2 中进行下拉分层导航

如何在导航视图中更改地图的样式?

如何在详细视图中进行一次额外的 API 调用?

如何在 django 视图中进行添加?

如何在 Odoo 的树视图中实现导航面板?