不是所有TableView单元格都能识别手势。

问题描述 投票:0回答:1

好吧,这个可能有点难以说明,但问题是这样的。我试着在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)
    }

}
ios swift xcode tableview cell
1个回答
0
投票

由于你没有发布任何与你的问题相关的代码,最好的猜测是。

手势识别器,比如 UILongPressGestureRecognizer - 是不同的实例。它们一次只能被添加到一个对象上。如果你试图将它添加到多个对象上,它只会 "存在 "于最后一个对象上。

你可能创建了一个手势识别器,然后试图将其添加到每个单元格中。

假设你使用的是自定义单元格类,你可能想要实例化一个 UILongPressGestureRecognizer 在你的单元格初始化代码中,将其添加到self(或 self.contentView 或任何你想响应手势的视图)。) 同时将其目标设置为单元格类中的一个func。当它被触发时,使用 "回调 "闭包或协议委托模式来通知你的控制器手势发生了。

© www.soinside.com 2019 - 2024. All rights reserved.