【问题标题】:Is there any way to setup gesture recognizers for repeating UI elements such as UITableViewCells?有没有办法为重复的 UI 元素(如 UITableViewCells)设置手势识别器?
【发布时间】:2016-11-29 04:56:51
【问题描述】:

我正在开发一个带有 UITableView 的 iOS 应用,该应用需要滑动手势才能对表格中的任何单元格(行)执行特定操作。

当我最初在我的视图控制器(其中包含 UITableView 的那个)中为手势实现 IBAction 时,我什至无法运行该应用程序,因为 Xcode 告诉我它不允许的错误将手势附加到重复的界面元素(单元格是重复元素,因为每次需要通过出列可重复使用的单元格时都会生成一个新元素)。

然后我继续将滑动手势的 IBAction 放置在我的自定义表格单元格类中,此时我不再收到阻止我构建/运行的错误,但我仍然在调试控制台中收到警告在运行应用程序时,它指出自 iOS9 以来,系统现在强制禁止附加到重复元素(在本例中为我的表格单元格)的手势。

如果有人对手势识别器有深入了解,如果您能帮助我解决以下问题,我将不胜感激。

  1. 我是否应该从表面上理解这个警告并假设我根本不允许在表格单元格上附加任何手势?

  2. 在任何一种情况下,是否有其他方法可以将手势附加到原型表格单元格等重复元素并避免任何类型的警告/禁止?

【问题讨论】:

  • 我需要它,因为内置的委托方法只能促进从右到左的滑动,而不是从左到右,这是我需要实现的。
  • 您不能在 Xcode 中将 UIGestureRecognizer 拖到 tableview 单元格上,否则会出现此错误,但您可以在运行时在 UITableViewCell 子类中创建手势识别器。完美运行。

标签: ios swift xcode uitableview


【解决方案1】:

您应该将滑动放在您的视图控制器中,并使用下面的代码通过 Swipe IBAction 获取一个单元格。完成后,您可以做任何您想做的事:cell.do_something 或 cell.element.do_something

你会得到滑动位置的单元格,比如:

目标 C:

CGPoint location = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

斯威夫特:

let location : CGPoint = sender.locationInView(self.tableView)
let indexPath : NSIndexPath = tableView.indexPathForRowAtPoint(location)
let cell : UITableViewCell = tableView(tableView, cellForRowAtIndexPath: indexPath)

【讨论】:

  • 我认为这可能是询问后不久的解决方案,并且我已经实现了您提供的代码,但是可以安全地假设通过将手势识别器附加到 UITableView 而不是视图控制器?因为我使用的是 UIViewController,里面有 UITableView,而不是 UITableViewController。
  • 我也有同样的情况,uiViewController里面的uitableview,发生的是你的测试是基于uitableview的“sender.locationInView(self.tableView)”我真的不记得戒指发生了什么出了它,可能 Nil 的测试就可以解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多