首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

添加onTapGesture时,SwiftUI onDelete无法检测到tap

在SwiftUI中,当我们给视图添加了onTapGesture手势时,onDelete方法可能无法检测到点击事件。这是因为onDelete方法是用于处理删除操作的,而onTapGesture是用于处理点击事件的,它们之间的触发机制不同。

要解决这个问题,我们可以使用onLongPressGesture手势来替代onTapGesture,因为长按手势会触发删除操作。具体步骤如下:

  1. onTapGesture替换为onLongPressGesture,并设置适当的持续时间阈值,例如0.5秒。
  2. onLongPressGesture中,执行删除操作的代码。

以下是一个示例代码:

代码语言:txt
复制
struct ContentView: View {
    @State private var items = ["Item 1", "Item 2", "Item 3"]

    var body: some View {
        List {
            ForEach(items, id: \.self) { item in
                Text(item)
                    .onLongPressGesture(minimumDuration: 0.5) {
                        self.deleteItem(item)
                    }
            }
        }
    }

    func deleteItem(_ item: String) {
        if let index = items.firstIndex(of: item) {
            items.remove(at: index)
        }
    }
}

在上面的示例中,我们使用List来展示一个字符串数组items中的每个元素。对于每个元素,我们将其包装在Text视图中,并为其添加了onLongPressGesture手势。当用户长按某个元素时,会触发删除操作,调用deleteItem方法将该元素从数组中移除。

这样,当我们长按某个元素时,就可以触发删除操作了。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),腾讯云对象存储(COS)

  • 腾讯云云服务器(CVM):提供可扩展的云服务器,适用于各种规模的应用程序和工作负载。它具有高性能、高可靠性和灵活性,并且支持多种操作系统和应用程序。 产品介绍链接地址:腾讯云云服务器(CVM)
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的对象存储服务,适用于存储和处理各种类型的数据,如图片、音频、视频、文档等。它具有高可靠性、高可扩展性和高性能,并且支持多种数据访问方式。 产品介绍链接地址:腾讯云对象存储(COS)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • SwiftUI 下定制手势

    SwiftUI 下,我们无法拥有类似构建全新 UIGestureRecongnizer 的能力。所谓的自定义手势,其实只是对系统预置手势的重构而已。...•onEnded在手势结束执行的操作•onChanged当手势提供的值发生变化时执行的操作。只在 Value 符合 Equatable 提供,因此 TapGesture 不支持。...resetTransaction 可以设置恢复初始数据的动画状态 组合手势的手段 SwiftUI 提供了几个用于手势的组合方法,可以将多个手势连接起来,重构成其他用途的手势。...当我们不在结构体中使用自定义的 Value 类型SwiftUI 可以推断出 Self.Body.Value,此时可以将 body 声明为some Gesture。...在本例中,我们选择在 TapGesture 的 onEnded 中回调用户的闭包 总结 当前 SwiftUI 的手势,暂处于使用门槛低但能力上限不足的状况,仅使用 SwiftUI 的原生手段无法实现非常复杂的手势逻辑

    2.7K20

    高级 SwiftUI 动画 — Part 1:Paths

    0.2 : 1.0) .animation(.easeInOut(duration: 1.0)) .onTapGesture {...当给一个视图制作动画SwiftUI 实际上是多次重新生成该视图,并且每次都修改动画参数。这样,它就会从原点值渐渐走向最终值。 假设我们为一个视图的不透明度创建一个线性动画。...然而,如果你发现自己有一个想做动画的复杂类型,没有什么能阻止你添加自己的VectorArithmetic协议的实现。事实上,我们将在下一个例子中这样做。 为了说明这一点,我们将创建一个模拟时钟形状。...你只需要添加 .drawingGroup() 修饰符: FlowerView().drawingGroup() 根据 WWDC 2019, Session 237(用SwiftUI构建自定义视图):绘图组是一种特殊的渲染方式...如果你想尝试一下,但你的形状还没有复杂到让设备挣扎的地步,添加一些渐变和阴影,你会立即看到不同。 接下来有什么内容? 在本文的第二部分,我们将学习如何使用 GeometryEffect 协议。

    3.8K20

    架构之路 (五) —— VIPER架构模式(一)

    它将允许用户通过向一条路线添加路径点来构建公路旅行。在此过程中,您还将了解您的iOS项目中的SwiftUI和Combine。 打开启动项目。...当您查看图表,您可以看到数据在视图view和实体entities之间流动的完整路径。 SwiftUI有自己独特的做事方式。...当将用户操作发送回数据模型,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新的旅程。...最后,在TripListView中,在ForEach的结束括号后面添加以下内容: .onDelete(perform: presenter.deleteTrip) 将. ondelete添加SwiftUI...当您将其放置在NavigationView中,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。

    17.5K10

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    注意:视频可能无法在模拟器中播放。 在真实设备上运行该应用程序将缓解该问题。 入门项目是一个 vlogger 应用程序,您将使用 AVKit 和 AVFoundation 添加功能和特性。...当它到达最后一个视频,您将再次将所有剪辑添加到队列中。 当谈到“跟踪”播放器的信息,唯一的途径就是使用键值观察(KVO)。 是的,这是 Apple 提出的最奇怪的 API 之一。...2) 当有人双击播放器视图,您可以添加一个侦听器。 这会在 2x 和 1x的播放速率之间切换。 3) 当有人单击播放器视图,您可以添加一个侦听器。 这会切换视频的静音状态。...PiP 视频无法在环境模式下播放。 打开 AppMain.swift 并添加此方法: private func setVideoPlaybackCategory() { try?...缺点是,在撰写本文,iOS 14.5是可用的最新版本,VideoPlayer 的 SwiftUI 视图未显示画中画按钮。

    7K10

    SwiftUI 与 Core Data —— 安全地响应数据

    SwiftUI 与 Core Data —— 问题[1]SwiftUI 与 Core Data —— 数据定义[2]SwiftUI 与 Core Data —— 数据获取[3]可以在 此处[4] 获取演示项目...例如,当你创建一个带有字符串属性的新对象,初始值( 在没有默认值的情况下 )是 nil,这在对象被验证之前( 通常在 save )是没有问题的。...image-20221212090247999image-20221212090306573而且,开发者无法通过更改声明代码将该属性类型修改为 Int16? 。...在更改数据进行二次确认为了避免对主线程造成过多的影响,我们通常会在私有上下文中进行会对数据产生变化的操作。...将操作方法的参数设置为值类型,将迫使开发者在对数据进行操作添加、删除、更改等 )首先需要确认对应数据( 数据库中 )是否存在。

    3.3K20

    SwiftUI 中创建自适应的程序化导航方案

    在栈中推送和弹出数据的过程对应了导航容器中添加和移除视图的操作。弹出全部数据相当于返回根视图,推送多个数据相当于一次性添加多个视图并直接跳转到最后数据所代表的视图。...不过仅有在前两列中通过 List(selection:) 来修改状态,才能在自动转换的 NavigationStack 表现形式中具备程序化导航的能力。方案一对此有进一步的说明。...: .clear) .contentShape(Rectangle()) .onTapGesture...否则视图无法响应状态的变化。...不要忘记 NavigationStack 的根视图不在它的“栈”数据中在本例中,转换至 NavigationStack ,需要将 Detail 列中声明的视图添加到“栈”的底端。反过来则将其移除。

    4.3K30

    SwiftUI 布局 —— 尺寸( 下 )

    本篇中,我们将通过对视图修饰器 frame 和 offset 的仿制进一步加深对 SwiftUI 布局机制的理解,并通过一些示例展示在布局需要注意的问题。....frame(width: 50, height: 100) .allowsHitTesting(false) } .onTapGesture...因此,针对 CALayer( 面子 )直接做出的调整,SwiftUI 的布局系统是无法感知的。...对齐[5] 一文中我们已经介绍了“对齐”是发生在容器中子视图之间的行为,因此对于 _FrameLayout 这种开发者只提供一个子视图同时又需要对齐的布局容器,我们需要通过在 modifier 中添加一个...当 min 或( 和 ) max 有值,会按如下规则返回 _FlexFrameLayout 的在该维度上的需求尺寸( 下图来自于 SwiftUI-Lab[6] ) frame-flow-chart

    2.7K40

    SwiftUI 4.0 的全新导航系统

    destination: () -> Destination) 上述两种方法有一定的局限性: 需要逐级视图进行绑定,开发者如想实现返回任意层级视图则需要自行管理状态 在声明 NavigationLink 仍需设定目标视图...在进入当前视图,无论是否进入目标视图,均将创建其实例( 不对 body 求值 ) NavigationLink("SubView2", destination: SubView2...4.0 中,在 List 绑定了数据后,通过 List 构造方法创建的循环或 ForEach 创建的循环中的内容( 不能自带点击属性,例如 Button 或 onTapGesture ),将被隐式添加...动态控制多栏显示状态 另一个之前困扰多栏 NavigationView 的问题就是,无法通过编程的手段动态地控制多栏显示状态。...} RocketSim_Screenshot_iPhone_13_Pro_Max_2022-06-12_09.12.01 NavigationStack 的 toolbar 背景色只有在视图上滚才会显示

    10.3K62

    SwiftUI:视图的显示和隐藏动画

    SwiftUI最强大的功能之一是能够自定义视图的显示和隐藏方式。以前,您已经了解了如何使用常规if条件有条件地包含视图,这意味着当条件更改时,我们可以从视图层次结构中插入或移除视图。...这里有一个带有按钮和矩形的VStack: struct ContentView: View { var body: some View { VStack { Button("Tap...首先,我们添加一些可以操作的状态: @State private var isShowingRed = false 接下来,我们使用该状态作为显示矩形的条件: if isShowingRed {...: 200) .transition(.scale) 现在点击按钮看起来好多了:当按钮腾出空间,矩形会放大,当再次点击,矩形会缩小。...一个有用的方法是不对称,它允许我们在显示视图使用一个转换,在视图消失时使用另一个转换。

    4.6K30

    掌握 Transaction,实现 SwiftUI 动画的精准控制

    当传递进来的 transaction 为 nil SwiftUI 会优化调用 .transaction 修饰器闭包的时机。...如果我们将 scaleEffect 替换为 offset,就无法实现与上面相同的效果:不同的动画组件应用不同的 transaction。 理论上,使用以下代码进行平移操作不应该带有动画效果。...TransactionKey 在 WWDC 2023 上,苹果为 SwiftUI 添加了 TransactionKey。这允许开发者在 transaction 中携带一些自定义信息。...在包装 UIKit 或 AppKit 控件,应添加检查当前 transaction 的逻辑。 在 iOS 17 中,更多的导航组件已支持通过使用“显式动画”来屏蔽动画转场。...无论 SwiftUI 未来为 transaction 添加多少信息,只要我们掌握了其原理,就能实现高效精准的动画。在出现预期之外的动画行为时,开发者也知道该如何调整。

    50720

    http请求发生了两次:options请求分析,移动端开发样式重置

    移动端开发样式重置及meta标签1 -webkit-tap-highlight-color-webkit-tap-highlight-color:rgba(0,0,0,0); 透明度设置为0,去掉点击链接和文本框对象默认的灰色半透明...-webkit-tap-highlight-color-webkit-tap-highlight-color:rgba(0,0,0,0);//透明度设置为0,去掉点击链接和文本框对象默认的灰色半透明覆盖层...(iOS)或者虚框(Android)-webkit-tap-highlight-color:rgba(255,0,0,0.5);   //利用此属性,设置touch链接区域高亮为50%的透明红,只在ios...ie7及以下浏览器还不识别此属性,需要在a标签上添加hidefocus="true"(2)input,textarea{outline:none}  取消chrome下默认的文本框聚焦样式(3)在移动端是不起作用的...例如你设置了 width=320 ,竖屏 initial-scale 就是 1 ,横屏则变成 1.5 了。 那么到底这些设置如何让 Safari 知道 ?

    1K00

    干货 | 关于SwiftUI,看这一篇就够了

    也就是说,声明一个属性SwiftUI会将当前属性的状态与对应视图的绑定,当属性的状态发生改变的时候,当前视图会销毁以前的状态并及时更新,下面具体分析一下这个过程。...用户交互过程中,会产生一个用户的action,从上图可以看出,在SwiftUI中数据的流转过程如下: 该行为触发数据改变,并通过@State数据源进行包装; @State检测到数据变化,触发视图重绘;...观察者模式是描述一对多关系:一个对象发生改变将自动通知其他对象,其他对象将相应做出反应。...: struct ContentView : View { var body: some View { Button(action: { // did tap...因为,在 SwiftUI中这些属性的设置在内部都会用一个View来承载,然后在布局的时候就会按照上面示例的布局流程,一层层View的计算布局下来,这样做的优点是:方便底层在设计渲染函数更容易做到monomorphic

    9K11

    TCA - SwiftUI 的救星?(一)

    在检测到新消息到来时,它会和当前的 Model 一并,作为输入传递给 update 函数。这个函数通常是 app 开发者所需要花费时间最长的部分,它控制了整个 app 状态的变化。...在 Unit Test 里,我们添加一个测试,来验证发送 .increment 的情况: func testCounterIncrement() throws { let store = TestStore...但是,实际上在使用 TCA 做项目,更多的情景我们从更小的模块进行构建 (它会包含自己的一套 Feature),然后再把这些本地内容”添加“到它的上级。所以 Store 的切分将会变得自然而然。...为数据文本添加颜色 为了更好地看清数字的正负,请为数字加上颜色[13]:正数用绿色显示,负数用红色显示。 添加一个 Reset 按钮 除了加和减以外,添加一个重置按钮,按下后将数字复原为 0。...请添加减号和重置按钮的相关测试。

    3.3K30

    升级完少5G空间!iOS 15.4更新,戴口罩刷脸,男男怀孕表情包来了

    若用户平常戴眼镜,也有「添加眼镜」的选项,协助用户戴着眼镜和口罩能更准确地解锁Face ID。 用户可以稍后添加眼镜信息。苹果公司允许每台手机注册最多四副眼镜。...现在还可以在戴着口罩验证Apple Pay交易。 据已体验者称,目前来看,解锁速度不受影响。...更新后的iOS加强了「检测到未知附件」提醒功能,会清楚弹出写有「检测到AirTag」的提示,而非「检测到未知配件」,改善以往易混淆AirTag与AirPods的问题。...Tap to Pay功能 苹果宣布,将要在iOS 15.4中支持使用Tap to Pay功能,「Tap to Pay」功能可以将iPhone变成一台商家主要使用的小型刷卡机,一改过去利用银行刷卡机靠卡付款的方式...bug 1、键盘可能会在键入的数字间插入句号 2、照片和视频可能不会同步到iCloud照片图库 3、「朗读屏幕」辅助功能在「图书」App中使用时可能会意外退出 4、在「控制中心」中关闭「实时收听」可能无法将其关闭

    94970

    SwiftUI中使用UIKit视图

    ,但仍有大量的事情是无法直接通过原生SwiftUI代码来完成的。...但SwiftUI无法真正进行无限量的调用来绘制视图,因此它必须以某种方式缩短递归。为了结束递归,SwiftUI包含了很多的原始类型(primitive types)。...对于一些实现复杂功能的UIKit模组,如果完全按照SwiftUI的模式将其业务逻辑彻底剥离是非常困难的。因此将无法剥离的业务逻辑的实现代码放入协调器中,靠近代理方法,便于相互之间的协调和管理。...无需添加@Environemnt,只需要在updateUIView中添加一条语句既可: uiView.isEnabled = context.environment.isEnabled 查看源代码 在写本文...因此,在你打算为了某个特定功能重新包装一个系统控件,请先考虑以下几点。 官方的原生方案 SwiftUI这几年发展的很快,每个版本都增加了不少新功能,或许你需要的功能已经被添加

    8.2K22
    领券