我无法阻止SwiftUI
的NavigationLink
被激活,当在List
中,我有这样一段简单的代码,在决定是否显示详细信息页面之前,我需要做一些业务检查(在现实世界的应用程序中,可能会有一些业务逻辑发生在按钮的操作中):
struct ContentView: View {
@State var showDetail = false
var body: some View {
NavigationView {
List {
Text("Text 1")
Text("Text 2")
Text("Text 3")
NavigationLink(destination: DetailView(), isActive: $showDetail) {
LinkView(showDetails: $showDetail)
}
}
}
}
}
struct LinkView: View {
@Binding var showDetails: Bool
var body: some View {
Button(action: {
self.showDetails = false
}) {
Text("Open Details")
}
}
}
struct DetailView: View {
var body: some View {
Text("Detail View")
}
}
在这种情况下,我如何防止导航链接打开详细信息页面?这是SDK中的一个bug吗?
p.s. XCode版本:13.3.1
和iOS版本(真实设备):13.3.1
- 编辑 *
我无法将List替换为ScrollView
,因为我的真实应用中有ForEach
的项目列表,因此请不要发布考虑使用ScrollView
的答案。
3条答案
按热度按时间dhxwm5r41#
在现实世界的应用程序中,按钮的操作内部可能会发生一些业务逻辑
似乎有点逻辑。你可以简单地有条件地禁用链接(并通知用户,链接是不可用的视觉外观)
其中
参数
失能
一个布尔值,它确定用户是否可以与此视图交互。
返回值
控制用户是否可以与此视图交互的视图。
讨论
视图层次结构中较高的视图可以覆盖您在此视图上设置的值。在以下示例中,按钮不是交互式的,因为外部disabled(_:)修饰符覆盖了内部修饰符:
but5z9lq2#
如果我正确地理解了您的目标,它可以是如下所示
以及
kh212irz3#
如果您使用.disable(true),它将像禁用按钮一样降低列表项的不透明度,以防止出现这种情况。请使用以下代码样式。使用backGround中的导航链接,并在点击视图的手势上检查导航条件。