gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:49:06 26 4
gpt4 key购买 nike

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

enter image description here

我想做什么:当我在列表中选择一行(例如 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。

我怎样才能走得更远?

提前致谢!

error

最佳答案

iOS 16+

注意:以下是如何以编程方式呈现新链接的简化示例。有关更高级的通用示例,请参阅 this answer .

在 iOS 16 中我们可以访问 NavigationStackNavigationPath这使我们能够以编程方式推送 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com