一尘不染

在按下按钮时在UITableViewCell中找到按钮的indexPath?

swift

下面的代码正确返回该单元格:

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)!

阅读 167

收藏
2020-07-07

共1个答案

一尘不染

我不知道是否有简单的方法可以做到这一点。( 编辑:
实际上有。请查看@mustafa的第二个解决方案。)一种解决方法是将按钮的标签设置为indexPath.rowin
cellForRowAtIndexPath,然后可以仅访问按钮的标签以找出按钮所属的行。

警告:
此解决方法很脆弱。如果您允许在不调用的情况下从表中添加或删除行,则它将无法正常工作tableView.reloadData()。看一下@mustafa的解决方案,它的功能更强大。

2020-07-07