我已使用此代码从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
以查看它所引用的类?
此致
答案 0 :(得分:1)
您可能最终会使用superview层次结构路由,但知道这不是一个好主意,因为Apple可以随时更改其表视图层次结构。在给定一个单元格内的按钮的情况下,有更好的方法来获取表格视图单元格的索引路径。
如果所有按钮都在表格视图的一个部分中,只需将每个按钮的标签设置为单元格的索引路径行。然后,您可以重新创建索引路径,知道按钮所在的行。
您始终可以继承UITableViewCell
并为子类内的按钮实现操作方法。子类可能会将一个委托方法调用到想要了解按钮点击的任何对象。
所以希望这可以让你了解以前做过的事情的替代方案。正如你所说,找出超级视图层次结构是非常耗时的,并且它可能随时发生变化。
答案 1 :(得分:0)
如果要检查多个超级视图层次结构,请按以下方式检查: -
UIView * view=(UIView*)sender;
while ((view= [view superview])) {
if(viewisKindOfClass:[UITableView class]) {
//your code
return;
}
}