我试图在一个更复杂的应用程序中获得此功能,但我继续做了一个简单的应用程序,也显示了我的问题。您可以在https://github.com/timfuqua/MultiTouchTable找到该项目。
在项目中,我在表视图控制器中创建了一个简单的表视图(我离开了表视图控制器,其默认名称为ViewController
)。我创建了一个数据源(字符串数组)并将其初始化为"项目0"通过"项目9"。我从ViewController
协议覆盖了numberOfRowsInSection
cellForRowAtIndexPath
和UITableViewDataSource
,以及didSelectRowAtIndexPath
和didDeselectRowAtIndexPath
来自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
。那会解决它。但它不是。
关于如何使这项工作的任何想法?甚至是答案,"不,这不是它的工作方式。你必须手动处理触摸。"对我来说没问题。提前谢谢。