好吧,这个可能有点难以说明,但问题是这样的。我试着在tableView单元格上附加一个长按手势识别器,并将其链接到Viewcontroller中。但是,这个手势并没有在表格中的每个单元格上工作--只有1个单元格。而且,它所作用的1个单元格会发生变化(有时是第一个单元格,有时是第二个单元格,等等--取决于有多少个单元格实际有数据)。如果有人能给我指出正确的方向,将非常感激。
下面是处理手势的代码。谢谢
if recognizer.state == .changed
{
let alertController = UIAlertController(title: nil, message:
"Open Product in Safari", preferredStyle: .alert)
let indexPath = tableView.indexPathForSelectedRow
let itemSku = self.itemArray[indexPath?.row ?? 0].sku
alertController.addAction(UIAlertAction(title: "Go to Safari", style: .default,handler: { action in
UIApplication.shared.open(URL(string: "\(itemURL)\(itemSku ?? "")") ?? URL(string: "")!, options: [:]) { _ in
print("Link opened")
}
}))
present(alertController, animated: true, completion: nil)
}
}
由于你没有发布任何与你的问题相关的代码,最好的猜测是。
手势识别器,比如 UILongPressGestureRecognizer
- 是不同的实例。它们一次只能被添加到一个对象上。如果你试图将它添加到多个对象上,它只会 "存在 "于最后一个对象上。
你可能创建了一个手势识别器,然后试图将其添加到每个单元格中。
假设你使用的是自定义单元格类,你可能想要实例化一个 UILongPressGestureRecognizer
在你的单元格初始化代码中,将其添加到self(或 self.contentView
或任何你想响应手势的视图)。) 同时将其目标设置为单元格类中的一个func。当它被触发时,使用 "回调 "闭包或协议委托模式来通知你的控制器手势发生了。