无法在多个表格单元格上加载手势识别器

时间:2016-09-09 12:04:17

标签: ios swift uitableview

我有一个tableView,我希望每个单元格能够响应长按手势。

我将手势识别器附加到原型单元并将其连接到tableViewController的快速代码上的IBAction。

当我运行应用程序时,第一个单元格加载正常,它响应长按手势并且没有错误。

当我向表中添加另一个项目时,我收到此错误:

2016-09-09 12:56:52.963 Day Care Register[1044:222155] WARNING: A Gesture
recognizer (<UILongPressGestureRecognizer: 0x7906a220; state = 
Possible; view = <Day_Care_Register.DogTableViewCell 0x799c2c00>; 
target= <(action=dogMarkedForBoarding:, target=
<Day_Care_Register.DogTableViewController 0x7906aa10>)>>) was setup in 
a storyboard/xib to be added to more than one view (->
<Day_Care_Register.DogTableViewCell: 0x7a1bac00; baseClass = 
UITableViewCell; frame = (0 0; 600 90); clipsToBounds = YES; 
gestureRecognizers = <NSArray: 0x79180200>; layer = <CALayer: 
0x7916cbe0>>) at a time, this was never allowed, and is now enforced. 
Beginning with iOS 9.0 it will be put in the first view it is loaded 
into.

好的,所以如果我理解这一点,我不能在多个单元格上使用相同的手势识别器吗?

我该如何解决?

我不确定你们想要看到的代码是什么,所以如果你想看到任何内容,请随时在评论中提问,我会尽快提供。

1 个答案:

答案 0 :(得分:0)

我过去这样做的方法是为UITableViewController创建一个手势识别器,为它指定一个表单的目标选择器:

func handleLongPress(recognizer: UILongPressGestureRecognizer)

当你实现handleLongPress(_ :)时,你可以迭代表视图中的可见单元格,测试可见单元格的框架是否包含点识别器.locationInView(Self.tableView):

func handleLongPress(recognizer: UILongPressGestureRecognizer) -> Void {
    guard let touchPoint : CGPoint = recognizer.locationInView(self.tableView) else { return }
    let cellInFocus : UITableViewCell? = {
        for cell in self.tableView.visibleCells {
            if cell.frame.containsPoint(touchPoint) {
                 return cell
            }
        }
        return nil
    }()

    guard let _ = cellInFocus else { return }

    // Take desired action with cell...

}

希望有所帮助!