在让他/她进入之前,我想先检测用户是否满足先决条件。如果不满足先决条件,应用程序将弹出一个actionSheet并向用户显示一些解锁功能的方法。 当我点击文本时,它的工作原理非常好。但是当我点击列表上的空白处时。它只是跳过绑定。奇怪的是,在我的实际项目中,即使我仅将其设置为false,绑定也将变为“ true”。 这是问题。我使用的是正确的方法还是错过了什么?还是这是一个错误? 谢谢。
struct ContentView: View {
@State var linkOne = false
@State var linkTwo = false
@State var linkThree = false
@State var actionOne = false
@State var actionTwo = false
@State var actionThree = false
var body: some View {
NavigationView{
List{
NavigationLink("Destination View One", destination: DestOneView(), isActive: self.$linkOne)
.actionSheet(isPresented: self.$actionOne) { () -> ActionSheet in
ActionSheet(title: Text("Hello"), message:Text("This is weird"), buttons: [ActionSheet.Button.cancel()])
}.onTapGesture {
self.actionOne = true
// self.linkOne = true
}
NavigationLink("Destination View Two", destination: DestTwoView(), isActive: self.$linkTwo)
.actionSheet(isPresented: self.$actionTwo) { () -> ActionSheet in
ActionSheet(title: Text("Hello"), message:Text("This is weird"), buttons: [ActionSheet.Button.cancel()])
}
.onTapGesture {
self.actionTwo = true
// self.linkTwo = true
}
NavigationLink("Destination View Three", destination: DestThreeView(), isActive: self.$linkThree)
.actionSheet(isPresented: self.$actionThree) { () -> ActionSheet in
ActionSheet(title: Text("Hello"), message:Text("This is weird"), buttons: [ActionSheet.Button.cancel()])
}
.onTapGesture {
self.actionThree = true
// self.linkThree = true
}
}
}
}
}
其他三个视图。
struct DestOneView: View {
var body: some View {
Text("First View")
}
}
struct DestTwoView: View {
var body: some View {
Text("Second View")
}
}
struct DestThreeView: View {
var body: some View {
Text("Third View")
}
}
答案 0 :(得分:2)
通常,在List
中,覆盖手势不能很好地工作。解决方案之一是使用Button
来显示NavigationLink
:
import SwiftUI
struct ContentView: View {
@State private var linkOne = false
...
var body: some View {
NavigationView {
List {
NavigationLink(destination: SomeView(), isActive: $linkOne) {
EmptyView()
}
Button(action: {
// here you can perform actions
self.linkOne = true
}, label: {
Text("Some text!")
})
Spacer()
}
}
}
}
答案 1 :(得分:0)
当我回来测试我的代码时。该解决方案并没有真正起作用。可能是由于列表的错误。另一则帖子上的人说,如果工作表位于列表中,则新视图中的列表仅显示一次。因此,当我在Xcode 11.5版中点击按钮时,在新视图中只有一个空列表。出于某种原因,如果我使用NavigationView,则所有内容都会缩小到视图的中间,而不是对齐到顶部。
我的解决方法是在.onAppear中设置Binding。视图加载时将弹出actionSheet。然后使用presentationMode方法返回上一个视图。
@Environment(\.presentationMode) var presentationMode
.
.
.
ActionSheet.Button.default(Text("Dismiss"), action: {
self.presentationMode.wrappedValue.dismiss()}