这篇文章讲了如何创建一个可以滑动显示隐藏按钮的过程,其中提到了UITableViewCell的视图层次。
<UITableViewCell; frame = (0 396; 320 44);> //1
| <UITableViewCellScrollView; frame = (0 0; 320 44); > //2
| | <UIButton; frame = (302 16; 8 12.5)> //3
| | | <UIImageView; frame = (0 0; 8 12.5);> //4
| | <UITableViewCellContentView; frame = (0 0; 287 44);> //5
| | | <UILabel; frame = (15 0; 270 43);> //6
当我们在定义Cell的时候,所有的UIView都是添加到ContentView上的,ContentView的superview是个UITableViewCellScrollView的对象,而这个ScrollView的superview就是我们的Cell
在iOS7中,如果我们要访问到某个subview所属的的自定义的Cell,需要使用3次superview。假设点击Cell的一个button,
这个button所属的Cell就是
button.superview.superview.superview; //contentView->scrollView->Cell
但在iOS8中,似乎取消了UITableViewCellScrollView
只需要
button.superview.superview
就能得到button所在的Cell
在这个回答里面,提供了一个更直接的方式获取Cell,不要根据版本来判断superview
NSIndexPath *indexPathForCell = [self.tableView indexPathForRowAtPoint:[self.tableView convertPoint:sender.center fromView:sender.superview]];
cell = [self.tableView cellForRowAtIndexPath:indexPathForCell];