在Swift中,是否有任何原生的,简单的方法可以在表格视图上启用多点触控选择?

时间:2015-03-05 22:13:09

标签: ios uitableview swift multi-touch multi-select

我试图在一个更复杂的应用程序中获得此功能,但我继续做了一个简单的应用程序,也显示了我的问题。您可以在https://github.com/timfuqua/MultiTouchTable找到该项目。

在项目中,我在表视图控制器中创建了一个简单的表视图(我离开了表视图控制器,其默认名称为ViewController)。我创建了一个数据源(字符串数组)并将其初始化为"项目0"通过"项目9"。我从ViewController协议覆盖了numberOfRowsInSection cellForRowAtIndexPathUITableViewDataSource,以及didSelectRowAtIndexPathdidDeselectRowAtIndexPath来自UITableViewDelegate协议,以便我可以跟踪被调用的内容。

我还ViewController设置为UIGestureRecognizerDelegate实施gestureRecognizer(_:shouldReceiveTouch)只是为了打印出收到的任何触摸的位置,但始终返回true。点击手势识别器链接到一个名为didTap的功能,该功能只会打印出来"收到点击"什么时候叫。我还将识别器的cancelsTouchesInView设置为true,以便让点击进入表格。

我在故事板中设置的表格视图为Selection: Multiple Selection以及View我已Interaction: Multiple Touch已检查的部分。我不知道我是否需要Interaction: Multiple Touch检查,但我还是会这样做。

当我在模拟器中运行应用程序(我还在iPad上测试过)时,我选择第3项,我看到项目3变为灰色,在我的调试控制台中,我看到这个打印:

Touch received at location 431.0,151.0 Received tap Selected cell Item 3

正如所料。然后,当我按住选项键进行2个手指选择时,将2个灰色光标点调整到我所拥有的位置,彼此间隔一个单元格高度,然后保持移位以将它们保持在该位置并移动它们第5项和第6项,然后点击我在控制台中得到这个:

Touch received at location 501.0,242.0 Touch received at location 501.0,286.0 Selected cell Item 6

只选择了2个单元格中的一个。还有我的问题。手势识别器捕获了2个触摸位置,您可以看到它们在y方向上与单元格高度的位置分开,但是对于项目6,didSelectRowAtIndexPath仅被调用一次,因此仅选择项目6 。我希望同时选择它们。

本机Apple Reminders应用程序将执行此操作。如果您打开“提醒”并转到“任务”并列出几个项目,则每个条目的左侧都有一个选择圈。如果点击一个,则选择它。如果您同时点击多个圆圈(例如2个手指),则会同时选择两个圆圈。这就是我想要的。但我似乎无法弄清楚如何在本地做到这一点。我只希望为每个接触点调用didSelectRowAtIndexPath。那会解决它。但它不是。

关于如何使这项工作的任何想法?甚至是答案,"不,这不是它的工作方式。你必须手动处理触摸。"对我来说没问题。提前谢谢。

0 个答案:

没有答案