【问题标题】:SwiftUI onDelete cannot detect tap when onTapGesture is added添加 onTapGesture 时,SwiftUI onDelete 无法检测到点击
【发布时间】:2020-10-03 14:23:12
【问题描述】:

我正在开发一个带有 SwiftUI 列表的 iOS 应用程序。我正在实施 .onDelete 以使用户能够删除行。但是,我发现当我将 .onTapGesture 添加到包含列表的 VStack 视图时,当用户在向左滑动行后点击“删除”按钮时,不会调用 onDelete 函数。但是,当用户将行滑动到左侧以删除它时,它仍然有效。似乎 .onTapGesture 阻止 .onDelete 接收用户输入。如何解决?

NavigationView {
    VStack(alignment: .leading) {
        List {
            ForEach(things) { thing in
                Text(thing)
            }
            .onDelete(perform: { indexSet in
                things.remove(atOffsets: indexSet)
            })
        }
        .listStyle(SidebarListStyle())
        }
    .onTapGesture {
    }
}

这里有一些代码可以显示我的问题。

【问题讨论】:

    标签: ios xcode swiftui


    【解决方案1】:

    这可能没用而且很hacky但是...如果您必须有一个可点击的区域,您可以将所有内容放在ZStack中并在列表上放置一个随机视图并使其可点击。然后你可以设置大量的填充来释放删除按钮将被点击的区域,如下所示:

            NavigationView {
            ZStack {
                List {
                    ForEach(things, id: \.self) { thing in
                        Text(thing)
                        }
                            .onDelete(perform: { indexSet in
                                things.remove(atOffsets: indexSet)
                            })
                        }
                            .zIndex(2)
                            .listStyle(SidebarListStyle())
                
                    Rectangle()
                        .zIndex(3)
                        .fill(Color.red)
                        .padding(.trailing, 80)
                        .allowsHitTesting(true)
                        .onTapGesture {
                            print("Blocking you")
                        }
                    }
            }
    

    我把颜色放进去,这样你就可以准确地看到你在哪里工作,上面的代码会让你看起来像这样:

    Tappable Rectangle on List

    当您对矩形覆盖的区域感到满意时,您可以将不透明度设置为非常小的值,只需将颜色替换为

    .opacity(0.000001)
    

    什么的。不幸的是,点击不适用于 Color.clear 或 hidden() 修饰符。

    【讨论】:

    • 实际上我添加了 onTapGesture 来禁用处于活动状态的键盘,因此可点击区域应该是整个屏幕。除了删除按钮之外,视图中已添加 onTapGesture 的所有其他按钮都可以正常工作。
    • @CollinZhang 我有同样的用例,我需要整个父级都可以点击来关闭键盘,但它会阻止删除按钮被点击。你有想过这个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多