在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是啥?

Posted

技术标签:

【中文标题】在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是啥?【英文标题】:What's the ideal way to detect tap/touch for multiple UI views inside a custom table cell?在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是什么? 【发布时间】:2016-01-30 06:18:07 【问题描述】:

我有一个带有自定义单元格的表格视图,每个单元格都包含多个 UI 视图。

当用户点击单元格内的 UI 视图时,应用会根据所点击的 UI 视图做出响应。例如,有三行,每行有不同数量的 UI 视图:(这些视图可能是图像、标签以组成不同的布局)

row1 - view1  view2  view3
row2 - view4  view5
row3 - view6  view7  view8  view9

如果用户点击 row3/view8,应用程序将检测到点击并知道 view8 被点击。

目前我有两个方向来实现这个:

(1) 在每个 UI 视图中添加UITapGestureRecognizer

(2) 检测 table view 上的触摸,并通过计算哪个 UI 视图包含触摸点来决定点击可见单元格的哪个 UI 视图,例如 the answer of this question。

我想知道理想的方式是什么?还有其他更好的方法或建议吗?

【问题讨论】:

【参考方案1】:

我会允许视图直接检测和处理水龙头。对我来说似乎最简单,这更像是 UIKit 的设计方式。 UITapGestureRecognizer 似乎很适合这个。

【讨论】:

谢谢。只是一个问题,由于行和 UIView 很多,所以有很多手势识别器会不会有太多的性能开销? 表格视图滚动时需要更新的视图数量会影响性能。如果您遇到性能问题,您可以做很多事情来优化它。例如,尽量不要使用透明背景或缩放任何东西。模拟器应用程序中的调试菜单可以帮助您解决这个问题。但我不认为手势识别器会对性能产生很大影响。 无论如何,不​​要过早优化。编写易于维护的代码。然后测试。然后,如果出现性能问题,请使用上述 Apple 工具和 Instruments 来查找问题并从那里解决。【参考方案2】:

您可以为此使用 UICollectionView。参考

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionView_class/ http://www.appcoda.com/ios-programming-uicollectionview-tutorial/

【讨论】:

不,不一样。这些视图是组成不同布局的图像和标签。我会将这个添加到我的问题中。

以上是关于在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

通过点击单元格内的图像从 UITableViewCell 中分离

Obj-C - 点击自定义表格视图单元格中的删除表格视图行按钮

ios在表格视图单元格中视觉调整图像大小

将单元格插入表格时,自定义表格视图单元格内的图像视图消失

表格单元格内的滚动视图内的自定义视图未响应事件

点击单元格内的按钮时如何显示更改?