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

时间:2020-06-12 16:35:56

标签: swift xcode swiftui

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

enter image description here

我想做的事情:当我在列表中选择一行(例如Lyon-Perrache TGV)并且两个文本字段都不为空时,我将被重定向到另一个视图。

有许多示例可以帮助您了解如何从另一个视图移至视图,但是始终要单击..(使用NavigationLink) 在填充两个文本字段以及从列表中选择目标文本字段时,我需要以编程方式准确地执行此操作。

这是我的代码的一部分:

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”的变量为移动到新View的触发点。 当我们在列表中为“目标”文本字段选择一行时,它等于true。

我该怎么做才能进一步?

提前谢谢!

error

1 个答案:

答案 0 :(得分:1)

您可以将NavigationLinkisActive参数一起使用。当您将此参数设置为true时,它将显示一个NewView

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

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