我有一个显示一行单元格的tableview控制器。每个单元格有3个按钮。我已经将每个单元格的标记编号为1、2、3。问题是我不知道如何找到按下哪个单元格上的按钮。我目前只能在其中一个按钮被按下的时候得到发送者的标签。有没有办法在按下按钮时也获得单元格行号?
发布于 2013-04-29 09:58:40
你真的应该使用这种方法:
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
Swift版本:
let buttonPosition = sender.convert(CGPoint(), to:tableView)
let indexPath = tableView.indexPathForRow(at:buttonPosition)
这将根据按下的按钮的位置为您提供indexPath
。然后,如果需要单元格,则只需调用cellForRowAtIndexPath
;如果需要行号,则调用indexPath.row
。
如果您是偏执狂,那么可以在使用它之前检查if (indexPath) ...
,以防在表视图上找不到indexPath
。
如果苹果决定改变视图结构,所有其他答案都可能被打破。
发布于 2011-09-22 02:09:18
一种解决方案可能是检查按钮的superview的标签,或者在视图层次结构中检查更高的标签(如果按钮在单元格的内容视图中)。
发布于 2016-07-25 22:12:22
我想在swift中分享代码-
extension UITableView
{
func indexPathForCellContainingView(view1:UIView?)->NSIndexPath?
{
var view = view1;
while view != nil {
if (view?.isKindOfClass(UITableViewCell) == true)
{
return self.indexPathForCell(view as! UITableViewCell)!
}
else
{
view = view?.superview;
}
}
return nil
}
}
https://stackoverflow.com/questions/7504421
复制相似问题