在Swift中,如何获取按下按钮的单元格行?

时间:2016-07-25 16:04:32

标签: swift

我已经尝试过indexPathForRowAtPoint解决方案,它最初工作,现在我不知道是什么打破了它。有没有人对我可能犯的一些常见错误有什么建议?感谢。

    let pointInTable = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
    let index = self.tableView.indexPathForRowAtPoint(pointInTable)?.row
    let prod_id = list[index].getProdID()

1 个答案:

答案 0 :(得分:0)

我会创建一个自定义单元格,它会有一个由按钮

触发的闭包回调
import UIKit

class ButtonCell: UITableViewCell {

    @IBOutlet weak var button: UIButton! {
        didSet{
            button.addTarget(self, action: #selector(ButtonCell.buttonTapped(_:)), forControlEvents: .TouchUpInside)
        }
    }

    var buttonWasTapped: ((cell: ButtonCell) -> Void)?

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

    func buttonTapped(sender:UIButton) {
        buttonWasTapped?(cell: self)
    }
}

现在在数据源中(注意:这里在视图控制器中实现,最好是一个单独的数据源对象)我设置回调来识别单元格,并用它来获取索引路径

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ButtonCell
        cell.buttonWasTapped = {
            cell in
            let idxPath = tableView.indexPathForCell(cell)
            let alert = UIAlertController(title: "tapped", message: "cell at indexpath: \(idxPath)", preferredStyle: .Alert)
            alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        }
        return cell
    }
}