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

时间:2015-08-13 15:21:41

标签: ios swift uitableview button action

我有这个:

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

}

这是如何完成的?

2 个答案:

答案 0 :(得分:1)

您始终可以使用按钮中的 tag 来传递或保留自定义单元格实现中的值或var。例如,如果您的outlet,例如)中的按钮为UITableViewCell

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
    }

答案 1 :(得分:0)

...一个解决方案可能是在您的类中包含一个var,其中包含最后一个单元格的indexPath,然后您可以在mapsHit()函数中使用该值。