如何创建将多个按钮组合在一起并启用滑动以选择所有按钮的 iOS UiView

Posted

技术标签:

【中文标题】如何创建将多个按钮组合在一起并启用滑动以选择所有按钮的 iOS UiView【英文标题】:How to create iOS UiView that combines multiple buttons next to each other and enables swiping to selecting all of them 【发布时间】:2013-05-16 09:22:48 【问题描述】:

现在我有几个按钮彼此相邻,如下所示:

用户必须全部按下才能选择整行(我有几行)。 让他们轻扫它们以选择它们是很自然的。 我还需要获取有关选择了多少按钮的信息。

您能帮我实现这一目标吗?我必须创建自己的视图或实现一些手势侦听器吗?

【问题讨论】:

是的,创建一个视图。在其中添加所有按钮。为该视图实现 UISwipeGesture 【参考方案1】:

根据您想要达到的目标,有两种简单的方法:

    最简单的:将UISwipeGestureRecognizer 添加到您的视图(或只有4 个按钮的视图)并在您的视图控制器中实现委托接口。 完成滑动(朝好的方向)后,您会收到一个事件并执行“解锁”。

UISwipeGestureRecognizer 扩展UIGestureRecognizer(文档here):

手势识别器的客户端也可以询问 通过调用 locationInView: 或 locationOfTouch:inView: 来做手势。

因此,通过 + 实施 UIGestureRecognizerDelegate(doc here),您应该能够准确检查您想要的内容。

    如果您想手动跟踪用户手指,您可以扩展 UIView 并实现: touchBegan touchMoved touchEnded

您可以在这里拥有完全控制权(CGRectContainsPoint() 会很有用)。

编辑: 做出选择时必须牢记的重要一点是速度。如果用户即使使用缓慢和非线性的手势也可以选择行(例如,将手指放在第一个按钮上 > 慢慢转到第二个 > 转到第三个 > 返回第二个 > 转到最后一个),您应该扩展 UIView并在触摸开始时使第一个图像突出显示,然后跟随手指直到最后一个按钮上的 touchEnd。它应该更加用户友好(当然取决于您要实现的目标)。

【讨论】:

如果我使用 1. 方式,我可以获取用户滑动多少像素的数据吗?例如。如果我的按钮是 50px 宽并且用户滑动 100px,则选择了 2 个按钮? 是的,我在下面编辑了我的答案:您实现了委托并使用 locationOfTouch:inView:。如果您需要更多控制,实现您自己的 UIView 子类也很容易,您将拥有更多控制权。 当用户滑动一个按钮时,您必须移动以下按钮...【参考方案2】:

查看这个开源项目Swipe-to-Select Gridview

【讨论】:

以上是关于如何创建将多个按钮组合在一起并启用滑动以选择所有按钮的 iOS UiView的主要内容,如果未能解决你的问题,请参考以下文章

通过滑动手指按下按钮(用于钢琴效果)

当用户没有完全滑动以删除表格视图单元格时,如何禁用/启用编辑按钮?

如何在 Access 中将一个控件源与来自用户表单的多个组合框一起使用?

Swift - 以编程方式创建的按钮和标签相互链接

如何仅在激活两个组合框时启用按钮

滑动以在UICollectionView上显示其他按钮