Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI:NavigationLink在列表中时始终处于激活状态_Swift_Xcode_Swiftui_Navigationlink - Fatal编程技术网

SwiftUI:NavigationLink在列表中时始终处于激活状态

SwiftUI:NavigationLink在列表中时始终处于激活状态,swift,xcode,swiftui,navigationlink,Swift,Xcode,Swiftui,Navigationlink,我无法阻止SwiftUI的NavigationLink在列表中被激活,我有一段简单的代码,在决定是否在真实世界的应用程序中显示详细信息页面之前,我需要进行某种业务检查,按钮操作中可能会发生一些业务逻辑: struct ContentView: View { @State var showDetail = false var body: some View { NavigationView { List { T

我无法阻止SwiftUI的NavigationLink在列表中被激活,我有一段简单的代码,在决定是否在真实世界的应用程序中显示详细信息页面之前,我需要进行某种业务检查,按钮操作中可能会发生一些业务逻辑:

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版本real device:13.3.1

编辑


我不能用ScrollView替换列表,因为我的真实应用程序中有一个ForEach项目列表,所以不要发布考虑使用ScrollView的答案。

如果我正确理解了你的目标,可以如下所示

List {
    Text("Text 1")
    Text("Text 2")
    Text("Text 3")
    LinkView(showDetails: $showDetail)
        .background(
            NavigationLink(destination: DetailView(), isActive: $showDetail) { EmptyView() })
}


如果我正确理解了你的目标,它可以如下

List {
    Text("Text 1")
    Text("Text 2")
    Text("Text 3")
    LinkView(showDetails: $showDetail)
        .background(
            NavigationLink(destination: DetailView(), isActive: $showDetail) { EmptyView() })
}

在现实世界的应用程序中,内部可能会发生一些业务逻辑 按钮的动作

看起来有点逻辑。你可以简单地有条件地禁用该链接,并通知用户,该链接不可用的视觉外观

NavigationLink(...).disabled(onCondition)
在哪里

参数

残废

一个布尔值,用于确定用户是否可以与此视图交互

返回值

控制用户是否可以与此视图交互的视图

讨论

视图层次结构中较高的视图可以覆盖在此视图上设置的值。在以下示例中,该按钮不是交互式的,因为外部禁用的:修改器覆盖了内部按钮:

HStack {
    Button(Text("Press")) {}
    .disabled(false)
}
.disabled(true)
在现实世界的应用程序中,内部可能会发生一些业务逻辑 按钮的动作

看起来有点逻辑。你可以简单地有条件地禁用该链接,并通知用户,该链接不可用的视觉外观

NavigationLink(...).disabled(onCondition)
在哪里

参数

残废

一个布尔值,用于确定用户是否可以与此视图交互

返回值

控制用户是否可以与此视图交互的视图

讨论

视图层次结构中较高的视图可以覆盖在此视图上设置的值。在以下示例中,该按钮不是交互式的,因为外部禁用的:修改器覆盖了内部按钮:

HStack {
    Button(Text("Press")) {}
    .disabled(false)
}
.disabled(true)

非常感谢您提供的清洁解决方案。但是,禁用视图会改变其外观,正如您所说,有没有办法自定义视图的禁用颜色?非常感谢您提供了干净的解决方案。但是禁用视图会改变其外观,正如您所说,有没有办法自定义视图的禁用颜色?