UIView touchesCancelled 未调用

Posted

技术标签:

【中文标题】UIView touchesCancelled 未调用【英文标题】:UIView touchesCancelled Not Called 【发布时间】:2018-06-14 15:25:15 【问题描述】:

我有一个子类 UIView 没有收到 touchesCancelled。如果触摸下来并拖到屏幕外(或应调用touchesCancelled 的任何其他实例),则调用touchesEnded 而不是touchesCancelled。它永远不会被调用!

我明白了:

self.clipsToBounds = true
self.isExclusiveTouch = true
self.isMultipleTouchEnabled = false

其他同级视图似乎会调用它们的touchesCancelled。我也没有附加手势识别器。

【问题讨论】:

请显示实际代码,而不是带有一些属性的小片段,并解释如何执行“触摸下来并拖动到屏幕外”以及您的期望。您显示的代码中甚至没有任何touchesCancelled!没办法问这个问题。请证明一个 MCVE。 【参考方案1】:

来自 Apple 文档 https://developer.apple.com/documentation/uikit/uiresponder/1621116-touchescancelled ...

UIKit 在收到需要取消触摸序列的系统中断时调用此方法。中断是导致应用程序变为非活动状态或导致处理触摸事件的视图从其窗口中移除的任何事情。

所以touchesCancelled不会在触摸移动/拖动到视图之外时被调用。

【讨论】:

抱歉,我必须更正 OP,我的意思是“在屏幕外”。在其他视图中也会调用 touchesCancelled 的任何其他事件。 这仍然不是“系统中断”——你得到touchesEnded是设计的。

以上是关于UIView touchesCancelled 未调用的主要内容,如果未能解决你的问题,请参考以下文章

UIControl 子类正在接收“touchesCancelled”而不是“touchesEnded”

调用 touchescancelled 而不是 touchesended

touchesEnded 或 touchesCancelled 并不总是被调用

在 UIScrollView 中滚动而不触发 touchesCancelled

在滚动视图上拖动视图:已收到 touchesBegan,但没有 touchesEnded 或 touchesCancelled

objective-c怎么代码触发按钮点击事件