0

我正在通过swift3中的故事板在uitableview中实现长按。我在情节提要中只有一个原型单元集。但问题是仅在第一个单元格中检测到长按。其余的单元格不听长按手势。

     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let row = indexPath.row
        cell.textLabel?.text = "Label"

        return cell
}

    @IBAction func longPress(_ guesture: UILongPressGestureRecognizer) {

        if guesture.state == UIGestureRecognizerState.began {
            print("Long Press")
        }
    }

控制台中显示的警告是:

有一次,这是不允许的,现在已经强制执行。从 iOS 9.0 开始,它将被放置在它加载到的第一个视图中。

4

2 回答 2

4

将手势附加到 tableview,并在触发手势时确定选择了哪个 indexPath。

override func viewDidLoad() {
    super.viewDidLoad()
       let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.longPress(_:)))
    tableView?.addGestureRecognizer(longPressRecognizer)
}

func longPress(_ guesture: UILongPressGestureRecognizer) {

    if guesture.state == UIGestureRecognizerState.began {
        let point = guesture.location(in: tableView)
        let indexPath = tableView.indexPathForRow(at: point);
        print("Long Press \(String(describing: indexPath))")
    }
}

因为 tableview 是一种滚动视图,所以最好将手势附加到 tableview 本身而不是它的任何子视图。这样就不太可能干扰必须跟踪的其他手势。

于 2017-05-24T13:46:28.737 回答
1

您需要为 cellForRowAtIndexPath 中的所有单元格添加手势

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let row = indexPath.row
        cell.textLabel?.text = "Label"

        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(HomeViewController.longPress(_:)))
        cell?.addGestureRecognizer(longPressRecognizer)
        return cell
}



func longPress(_ guesture: UILongPressGestureRecognizer) {

        if guesture.state == UIGestureRecognizerState.began {
            print("Long Press")
        }
    }
于 2017-05-24T13:23:38.427 回答