如何了解superview层次结构

时间:2014-07-05 17:40:26

标签: ios objective-c

我已使用此代码从UIButton内部获取UITableViewCell,但它无效。所以我调试了半个小时才能知道它的超级视图。

UIButton *button = (UIButton *)sender;
UITableViewCell* cell = (UITableViewCell*)button.superview.superview.superview;
UITableView* tableView = (UITableView*) cell.superview.superview;
NSIndexPath* indexPath = [tableView indexPathForCell:cell];

现在的问题是:我怎么能知道将来UITableView或其他人的层次结构是什么?是不是有一个列表,我可以看到我需要多少超级视图没有测试100次并设置BreakPoints以查看它所引用的类?

此致

2 个答案:

答案 0 :(得分:1)

您可能最终会使用superview层次结构路由,但知道这不是一个好主意,因为Apple可以随时更改其表视图层次结构。在给定一个单元格内的按钮的情况下,有更好的方法来获取表格视图单元格的索引路径。

  1. 如果所有按钮都在表格视图的一个部分中,只需将每个按钮的标签设置为单元格的索引路径行。然后,您可以重新创建索引路径,知道按钮所在的行。

  2. 您始终可以继承UITableViewCell并为子类内的按钮实现操作方法。子类可能会将一个委托方法调用到想要了解按钮点击的任何对象。

  3. 所以希望这可以让你了解以前做过的事情的替代方案。正如你所说,找出超级视图层次结构是非常耗时的,并且它可能随时发生变化。

答案 1 :(得分:0)

如果要检查多个超级视图层次结构,请按以下方式检查: -

UIView * view=(UIView*)sender;

while ((view= [view superview])) {
    if(viewisKindOfClass:[UITableView class]) {
        //your code
        return;
    }
}