下面的代码正确返回该单元格:
func findSuperView(sender:UIButton!) -> UITableViewCell { var superView : UIView? = sender.superview var foundSuperView : UITableViewCell! while superView != nil && foundSuperView == nil { if let cell = superView as? UITableViewCell { foundSuperView = cell break } else { superView = superView?.superview } } return foundSuperView }
但是在表视图中查找indexpath会崩溃:
var indexPath : NSIndexPath = self.table .indexPathForCell(findSuperView(sender))! println("Section (indexPath)")
我尝试了另一种方法,但是没有成功:
var button : UIButton = sender as UIButton; var touch: UITouch = events .allTouches()?.anyObject() as UITouch var location : CGPoint = touch.locationInView(self.table) var indexPath : NSIndexPath = self.table.indexPathForRowAtPoint(location)!
我不知道是否有简单的方法可以做到这一点。( 编辑: 实际上有。请查看@mustafa的第二个解决方案。)一种解决方法是将按钮的标签设置为indexPath.rowin cellForRowAtIndexPath,然后可以仅访问按钮的标签以找出按钮所属的行。
indexPath.row
cellForRowAtIndexPath
警告: 此解决方法很脆弱。如果您允许在不调用的情况下从表中添加或删除行,则它将无法正常工作tableView.reloadData()。看一下@mustafa的解决方案,它的功能更强大。
tableView.reloadData()