我已经尝试过indexPathForRowAtPoint解决方案,它最初工作,现在我不知道是什么打破了它。有没有人对我可能犯的一些常见错误有什么建议?感谢。
let pointInTable = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
let index = self.tableView.indexPathForRowAtPoint(pointInTable)?.row
let prod_id = list[index].getProdID()
答案 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
}
}