[英]SwiftUI TapGesture Not Working with NavigationLink in List on iOS
当我在 iOS 的 SwiftUI 的NavigationLink
上使用.simultaneousGesture(TapGesture().onEnded{ //code to run })
时,代码运行正常并且链接打开。
但是,如果NavigationLink
在List
中,则代码会运行但链接不会打开。
在点击List
NavigationLink
之后,但在TextEditor
出现之前,是否有另一种方法可以运行一些代码?
在TextEditor
上使用.onAppear
是不合适的,因为我需要在 TextEditor 出现之前运行代码 - 部分原因是TextEditor
的重新渲染存在错误,部分原因是为了让事情以正确的顺序流动。
复制问题的代码:
import SwiftUI
struct ContentView: View {
@State private var textString = ""
@State private var listMembers = ["Link A", "Link B", "Link C"]
var body: some View {
NavigationView {
VStack {
List(listMembers, id: \.self) { member in
NavigationLink(member, destination: TextEditor(text: $textString))
.simultaneousGesture(TapGesture().onEnded {
textString = "Link A, B, or C was tapped."
print(textString)
})
}
NavigationLink("Link D", destination: TextEditor(text: $textString))
.simultaneousGesture(TapGesture().onEnded {
textString = "Link D was tapped."
})
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
谢谢你!
我能想到的最好的方法是使用 ForEach 而不是 List。 它需要更多格式才能使其看起来不错,但似乎可以解决问题。
import SwiftUI
struct ContentView: View {
@State private var textString = ""
@State private var listMembers = ["Link A", "Link B", "Link C"]
var body: some View {
NavigationView {
VStack {
/*List(listMembers, id: \.self) { member in
NavigationLink(member, destination: TextEditor(text: $textString))
.simultaneousGesture(TapGesture().onEnded {
textString = "Link A, B, or C was tapped."
print(textString)
})
}*/
ForEach(listMembers, id: \.self) { member in
NavigationLink(member, destination: TextEditor(text: $textString))
.simultaneousGesture(TapGesture().onEnded {
textString = "Link A, B, or C was tapped."
print(textString)
})
}
NavigationLink("Link D", destination: TextEditor(text: $textString))
.simultaneousGesture(TapGesture().onEnded {
textString = "Link D was tapped."
})
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.