繁体   English   中英

如何在 SwiftUI 中以编程方式切换到另一个视图(无需按下按钮)

[英]How to switch to another view programmatically in SwiftUI (without a button press)

我在不按 SwiftUI 应用程序中的按钮的情况下切换到另一个视图时遇到问题。 我可以举很多我想做的例子: 1-想象一个登录表单,我们需要填写 2 个文本字段:用户名和密码。 当完美匹配时,我们会自动进行身份验证。 2-现在以我为例。 我有这样的看法:

在此处输入图像描述

我想要做什么:当我 select 在列表中的一行(例如 Lyon-Perrache TGV)并且如果两个文本字段不为空 => 我被重定向到另一个视图。

有很多例子可以知道如何从另一个视图移动到一个视图,但总是单击按钮..(使用 NavigationLink)我需要在两个文本字段被填充时以及当我 select 列表中的目标文本字段时以编程方式执行此操作.

这是我的代码的一部分:

import SwiftUI



struct Search: View {



 @ObservedObject var webservice = Webservice()

 @State var Depart: String = ""

 @State var Destination: String = ""

 @State var listStation = [Station]()

 @State var predictedValues: Array<String> = []

 @State var isBeingEditedDeparture: Bool = false

 @State var isBeingEditedDestination: Bool = false

 @State var hey: Bool  = false

 @State var activate: Bool  = false



init() {

      UITableView.appearance().showsVerticalScrollIndicator = false

      UITableView.appearance().backgroundColor = .clear

      UITableViewCell.appearance().backgroundColor = .clear

      //UITableView.appearance().separatorColor = .clear

  }



var body: some View {





    VStack(alignment: .leading){



        PredictingTextField(listStation: self.$listStation , predictedValues: self.$predictedValues, 
        Depart: self.$Depart, Destination: self.$Destination, isBeingEditedDeparture: 
        self.$isBeingEditedDeparture, isBeingEditedDestination: self.$isBeingEditedDestination )



            .textFieldStyle(RoundedBorderTextFieldStyle())



        List() {

            ForEach(self.predictedValues, id: \.self){ value in



                Text(value)

                    .onTapGesture {

                        if(self.isBeingEditedDeparture == true)

                        {

                            self.Depart = value

                        }

                        else{

                            self.Destination = value
                            self.activate = true

                        }

                }

            }

        }.padding(.top, 10)



    }

}

我已经声明了一个名为“activate”的变量作为移动到新视图的触发点。 当我们 select 在“目标”文本字段列表中的一行时,它等于 true。

我该怎么做 go 进一步?

先感谢您 !

错误

您可以使用带有isActive参数的NavigationLink 当您将此参数设置为true时,它将显示一个NewView

@State var activated: Bool = false
NavigationLink(destination: NewView(), isActive: $activated) {
    EmptyView()
}

然后,您需要将NavigationLink放在NavigationView中以使其工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM