将索引路径信息从单元格 Swift 传递到按钮操作

Passing index path information to button action from cell Swift

我有这个:

let mapsbut = cell.viewWithTag(912) as! UIButton
mapsbut.addTarget(self, action: "mapsHit:", forControlEvents: UIControlEvents.TouchUpInside)

func mapsHit(){

    // get indexPath.row from cell
    // do something with it

}

这是如何实现的?

...一个解决方案可能是在你的 class 中有一个 var 保存最后一个单元格的 indexPath ,然后你可以在你的 mapsHit() 函数中使用该值.

您始终可以使用按钮中的 tag 来传递或保存值,或自定义单元格实现中的变量。例如,如果您在 UITableViewCell 中将按钮设置为 outlet 例如 ):

class MenuViewCell: UITableViewCell {

    @IBOutlet weak var titlelabel: UILabel!
    @IBOutlet weak var button: UIButton! {
        didSet {
            button.addTarget(self, action: "mapsHit:", forControlEvents: UIControlEvents.TouchUpInside)
          }
    }
    func mapsHit(sender: UIButton){
        let indexPathOfThisCell = sender.tag
        println("This button is at \(indexPathOfThisCell) row")
        // get indexPath.row from cell
        // do something with it

    }
}

这里注意,设置"mapsHit:"的时候需要设置参数sender:UIButton。这将是用户点击的按钮本身。

现在,要使其正常工作,您的标签不能是 "912"。相反,当你构建你的单元格时,分配给你按钮的 tag 属性,它的值是 indexPath.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("MenuViewCell", forIndexPath: indexPath) as! MenuViewCell

        cell.titlelabel?.text = data[indexPath.row].description
        cell.button.tag = indexPath.row
        return cell
    }