SwiftUI NavigationLink 没有以编程方式推送视图
SwiftUI NavigationLink not pushing view programmatically
我在使用 NavigationLink
.
在 SwiftUI 中推送视图时遇到问题
目前我已将其设置为根据登录是否成功将绑定布尔值设置为“true”。但是,当我 运行 代码时,尽管布尔值已成功更改,但视图并未被推送。
我正在使用 Swift 5 并在 WatchOS 6.2 上开发,它不需要 NavigationLink
嵌套在 NavigationView
中,因为它不受支持。
import SwiftUI
struct Login: View {
@State var pushErrorView = false
@State var pushActivityView = false
var body: some View {
VStack{
Button(action:
{
self.login()
}) {
Text("Log In")
}
NavigationLink(destination: PopupMessage(message: "Login Error"), isActive: self.$pushErrorView) {
EmptyView()
}.hidden()
NavigationLink(destination: ActivityView(), isActive: self.$pushActivityView) {
EmptyView()
}.hidden()
}
}
private func login(){
if loginSuccess() {
self.pushActivityView = true
}
else {
self.pushErrorView = true
}
}
}
试试:
NavigationLink(destination: YourSecondView(), isActive: $areYouGoingToSecondView) {
EmptyView()
}
不需要.hidden()
这是有效的解决方案。在复制代码上使用 Xcode 11.4 / watchOS 6.2 进行测试(由于缺少依赖组件)。
struct Login: View {
@State var pushErrorView = false
@State var pushNextView = false
var body: some View {
VStack{
Button(action:
{
self.login()
}) {
Text("Log In")
}.background(
NavigationLink(destination: Group {
if pushErrorView { PopupMessage(message: "Login Error") }
else { ActivityView() }
}, isActive: self.$pushNextView) { EmptyView() }
)
}
}
private func login(){
self.pushErrorView = !loginSuccess()
self.pushNextView = true
}
}
我在使用 NavigationLink
.
目前我已将其设置为根据登录是否成功将绑定布尔值设置为“true”。但是,当我 运行 代码时,尽管布尔值已成功更改,但视图并未被推送。
我正在使用 Swift 5 并在 WatchOS 6.2 上开发,它不需要 NavigationLink
嵌套在 NavigationView
中,因为它不受支持。
import SwiftUI
struct Login: View {
@State var pushErrorView = false
@State var pushActivityView = false
var body: some View {
VStack{
Button(action:
{
self.login()
}) {
Text("Log In")
}
NavigationLink(destination: PopupMessage(message: "Login Error"), isActive: self.$pushErrorView) {
EmptyView()
}.hidden()
NavigationLink(destination: ActivityView(), isActive: self.$pushActivityView) {
EmptyView()
}.hidden()
}
}
private func login(){
if loginSuccess() {
self.pushActivityView = true
}
else {
self.pushErrorView = true
}
}
}
试试:
NavigationLink(destination: YourSecondView(), isActive: $areYouGoingToSecondView) {
EmptyView()
}
不需要.hidden()
这是有效的解决方案。在复制代码上使用 Xcode 11.4 / watchOS 6.2 进行测试(由于缺少依赖组件)。
struct Login: View {
@State var pushErrorView = false
@State var pushNextView = false
var body: some View {
VStack{
Button(action:
{
self.login()
}) {
Text("Log In")
}.background(
NavigationLink(destination: Group {
if pushErrorView { PopupMessage(message: "Login Error") }
else { ActivityView() }
}, isActive: self.$pushNextView) { EmptyView() }
)
}
}
private func login(){
self.pushErrorView = !loginSuccess()
self.pushNextView = true
}
}