【问题标题】:Move from one view to another view in swiftUI在 swiftUI 中从一个视图移动到另一个视图
【发布时间】:2021-10-15 19:59:24
【问题描述】:

我是 swiftUI 的新手,正在做一个登录申请表。有电子邮件 ID 和密码文本字段以及一个登录按钮。单击登录按钮后,它应该移至下一个视图。请注意,我不想使用导航链接和导航视图进行导航。我尝试了以下代码。但是下一个视图会在当前视图本身中加载,就像在第二张图片中一样

struct Login: View {

  @State private var success = false

                TextField("Email ID", text: $emailId , onEditingChanged: { (isChanged) in
                    if !isChanged {
                        if self.textFieldValidatorEmail(self.emailId) {
                            self.isEmailValid = true
                        } else {
                            self.isEmailValid = false
                            self.emailId = ""
                        }
                    }
                })
                 TextField("Password", text: $password)
                    .modifier(customViewModifier(roundedCornes: 6,  textColor: .black))
                    .frame(height: 100)
                    .padding(\[.leading, .trailing\], 100)


               Button(action: {
                        btnLoginClicked()
                }, label: {
                    Text("Sign In")
                        .frame(width: 200, height: 30)
                        .padding()
                        .background(Color.red)
                        .foregroundColor(Color.white)
                        .font(.custom("Open Sans", size: 28))
                        
                })
             if(success)
                {

                    SelectLocation()
                }
              }
              



func btnLoginClicked()
                   {
                     success = true
                   }
            }

SelectLocation.swift 是另一个 swiftUI 文件,我需要在其中显示其他详细信息

以下是屏幕

第二张图是 Login.swift 文件和 SelectLocation.swift 文件的组合。

请让我纠正我哪里错了

【问题讨论】:

  • 如果不使用 NavigationLink,您想如何导航?你只是想避开导航栏吗?
  • @George 我想使用 Navigation bar ,但我的应用程序是专门为 iPad 设计的,如果我使用 NavigationView 我会得到默认的拆分视图导航栏。我的应用程序设计有一个常规导航栏,我们曾经在 Obj-C 应用程序中拥有它。我希望在 swiftUI 应用程序中具有相同的外观。所以我不去 NavigationLink

标签: ios swift ipad swiftui


【解决方案1】:

您需要将您的登录项目放在if(success) else brunch 中。现在它们无论如何都会显示出来

完美地你会把这个逻辑移出,所以我建议你使用类似的东西:

struct RootView: View {
    @State
    var success = false
    
    var body: some View {
        if success {
            SelectLocation()
        } else {
            LoginView(onSuccess: {
                success = true
            })
        }
    }
}

struct LoginView: View {
    let onSuccess: () -> Void
    
    var body: some View {
        // your login views
    }
    
    func btnLoginClicked() {
        onSuccess()
    }
}

【讨论】:

  • 这基于一个条件,如果成功为真,则导航到 SelectLocation ,否则显示登录视图。但是,一般来说,如果单击按钮,我想导航到另一个 swiftUI 文件
  • @Honey 这就是我用闭包修改@State 的原因,您可以将所有RootViewLoginViewSelectLocation 放在不同的文件中
  • 嗨@Honey,我的回答解决了你的问题吗?如果是,请接受。如果您仍然不清楚这个if,请告诉我更多关于它为什么不适合您的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多