将索引路径信息从单元格 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
}
我有这个:
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
}