首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按下按钮时获取UITableView单元格的行

按下按钮时获取UITableView单元格的行
EN

Stack Overflow用户
提问于 2011-09-22 02:00:55
回答 4查看 72.2K关注 0票数 84

我有一个显示一行单元格的tableview控制器。每个单元格有3个按钮。我已经将每个单元格的标记编号为1、2、3。问题是我不知道如何找到按下哪个单元格上的按钮。我目前只能在其中一个按钮被按下的时候得到发送者的标签。有没有办法在按下按钮时也获得单元格行号?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-29 09:58:40

你真的应该使用这种方法:

代码语言:javascript
复制
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];

Swift版本:

代码语言:javascript
复制
let buttonPosition = sender.convert(CGPoint(), to:tableView)
let indexPath = tableView.indexPathForRow(at:buttonPosition)

这将根据按下的按钮的位置为您提供indexPath。然后,如果需要单元格,则只需调用cellForRowAtIndexPath;如果需要行号,则调用indexPath.row

如果您是偏执狂,那么可以在使用它之前检查if (indexPath) ...,以防在表视图上找不到indexPath

如果苹果决定改变视图结构,所有其他答案都可能被打破。

票数 277
EN

Stack Overflow用户

发布于 2011-09-22 02:09:18

一种解决方案可能是检查按钮的superview的标签,或者在视图层次结构中检查更高的标签(如果按钮在单元格的内容视图中)。

票数 0
EN

Stack Overflow用户

发布于 2016-07-25 22:12:22

我想在swift中分享代码-

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7504421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档