![](/img/trans.png)
[英]SwiftUI: How to make NavigationLink not go anywhere and stay on current view
[英]SwiftUI how to make a view link somewhere if a condition is met after a button press, otherwise stay in the same view?
所以我有这个代码:
import SwiftUI
struct LoginView: View {
@ObservedObject var vm : PlayerViewModel
@State private var username = ""
private var searchAllowed : Bool{
if(username.count>2)
{
return false
}
return true
}
var body: some View {
NavigationView{
ZStack{
VStack{
Text("Enter your Username:")
TextField("Username", text: $username)
Button{
Task{
if let uuid = await vm.getUUID(username: username)
{
await vm.getPlayer(uuid: uuid)
print(vm.state)
}
}
} label:
{
LabelView()
}
}
}
switch vm.state{
case .loading:
LoadingView()
default:
EmptyView()
}
}
}
}
}
现在,在按钮任务中,我调用了两个异步函数并获取了一些数据,现在我想要做的是如果我得到的数据是好的(对我来说,我在我的 ViewModel 中定义了一个枚举,在这种情况下,如果它是 vm.state.success)我想被发送到另一个视图,如 NavigationLink 会这样做,否则我只想留在同一个视图中,也许只是显示一些文本视图或其他东西。 但我真的不知道我将如何实现这样的事情,我已经做了一段时间的研究。
如果它成功了,我真的希望它就像搜索按钮只是一个导航视图,并且它可以将我发送到某个地方,并且可以使用后退箭头将我发送回原始视图。 但如果发生其他任何事情,我想留在这个原始视图中,只显示一些文本。 有谁知道我怎么能做这样的事情? 我一直在考虑这个问题,但想不出解决方案,我需要按下按钮,在加载 api 调用时显示加载视图,如果数据很好,我想要那个按钮表现得好像它是一个新视图的导航链接,否则如果不是,我想留在同一个视图中,也许只是添加一个警报。 这在 SwiftUI 中是否可行?
只需使用
public init(isActive: Binding<Bool>, @ViewBuilder destination: () -> Destination, @ViewBuilder label: () -> Label)
NavigationLink的初始化程序
这是使用示例:
import SwiftUI
struct LoginView: View {
@ObservedObject var vm : PlayerViewModel
@State private var username = ""
@State private var navigateToView = false
var body: some View {
NavigationView {
ZStack {
VStack {
Text("Enter your Username:")
TextField("Username", text: $username)
Button {
Task {
if let uuid = await vm.getUUID(username: username) {
await vm.getPlayer(uuid: uuid)
DispatchQueue.main.async {
navigateToView = true
}
}
}
} label: {
LabelView()
}
}
NavigationLink(isActive: $navigateToView, destination: { DestinationView() }, label: { EmptyView() })
}
}
}
}
struct DestinationView: View {
var body: some View {
Text("You have successfully logged in!")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.