我无法在不按下 SwiftUI 应用程序中的按钮的情况下切换到另一个 View 。 我可以举很多例子来说明我想做什么: 1- 想象一个登录表单,我们需要填写 2 个文本字段:用户名和密码。当存在完美匹配时,我们会自动进行身份验证。 2-现在以我为例。我有这样的看法:
我想做什么:当我在列表中选择一行(例如 Lyon-Perrache TGV)并且如果两个文本字段不为空 => 我被重定向到另一个 View 。
有许多示例可以了解如何从另一个 View 移动到另一个 View ,但始终需要单击按钮 ..(使用 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。
我怎样才能走得更远?
提前致谢!
最佳答案
iOS 16+
注意:以下是如何以编程方式呈现新链接的简化示例。有关更高级的通用示例,请参阅 this answer .
在 iOS 16 中我们可以访问 NavigationStack和 NavigationPath这使我们能够以编程方式推送 View 。
struct ContentView: View {
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
Text("ContentView")
.navigationDestination(for: String.self) { view in
if view == "NewView" {
Text("NewView")
}
}
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
path.append("NewView")
}
}
}
}
在上面的示例中,您可以通过从任何地方执行 path.append("NewView")
来触发 NewView
出现。
iOS 13-15
您可以使用带有 isActive
参数的 NavigationLink
。当您将此参数设置为 true
时,它将显示一个 NewView
:
@State var activated: Bool = false
NavigationLink(destination: NewView(), isActive: $activated) {
EmptyView()
}
然后您需要将您的 NavigationLink
放在 NavigationView
中以使其工作。
关于swift - 如何在 SwiftUI 中以编程方式切换到另一个 View (无需按下按钮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62348642/