我有一个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.
好的,所以如果我理解这一点,我不能在多个单元格上使用相同的手势识别器吗?
我该如何解决?
我不确定你们想要看到的代码是什么,所以如果你想看到任何内容,请随时在评论中提问,我会尽快提供。
答案 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...
}
希望有所帮助!