在 iOS 14 上,按钮不会通过触摸到集合视图单元格

Posted

技术标签:

【中文标题】在 iOS 14 上,按钮不会通过触摸到集合视图单元格【英文标题】:Button doesn’t pass through touches to collection view cell on iOS 14 【发布时间】:2021-01-25 15:45:59 【问题描述】:

我注意到一些奇怪的行为。

我在其contentView 中获得了CollectionViewCell 和UIButton。

我实现了contextMenuConfigurationForItemAt方法,它在ios 13上运行良好。但是当我尝试在iOS 14上测试它时,按钮并没有通过长按触摸并自行处理。

知道如何解决它,为什么会这样?

请注意,我不希望按钮的 hitTestpointInside 方法中包含复杂的逻辑。

【问题讨论】:

【参考方案1】:

“我不希望按钮的 hitTest 或 pointInside 方法中有复杂的逻辑” - 我希望我可以包含笑的表情符号。我强烈建议使用 hitTest(:)pointInside(:) 方法来直接控制按钮按下的执行位置 - 特别是因为 iOS 版本可能会发生变化,例如你遇到的问题 - 或者如果你最终改变了你的用户界面。

例如:

hitTest(:) -- 返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代。

因此,如果您在按钮后面添加一些东西,那么该按钮将不再是被点击的项目。因此,您应该通过实施相关方法来认真控制这一点。

【讨论】:

我的意思是,如果我这样做,我将无法在按钮上实现上下文菜单。但是,如果我在我的应用程序中使用那个自定义按钮,有时它应该响应 kn 长按触摸。 感谢您的回答!但是你知道新的ios版本有什么变化吗?我找不到任何关于它的信息,它令人困惑( 我不知道——一般来说,像这样的小事故经常发生。作为 3rd 方开发者,我们唯一能做的就是尝试保证我们的结果;例如,使用上述方法。 您可以添加长按和手势,以及从不同视图控制器作为输入的动作 - 以及根据需要删除手势

以上是关于在 iOS 14 上,按钮不会通过触摸到集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 的滚动视图内检测按钮的触摸

带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动

iOS 接触开始

如何在iOS中将触摸事件发送到superview?

iOS 上 OpenFeint 滚动视图中的触摸问题

集合视图在第一个索引上设置单选按钮图像并选择更改