iOS7 이전에는 셀의 수퍼 뷰가 UITableView
포함되었습니다. GM iOS7에 현재의 수퍼 셀이있다 (그래서 아마도 아니라 공개용 될 예정) UITableViewWrapperView
의 수퍼은 인으로 UITableView
. 문제에 대한 두 가지 해결책이 있습니다.
솔루션 # 1 : UITableViewCell
카테고리 생성
@implementation UITableViewCell (RelatedTable)
- (UITableView *)relatedTable
{
if ([self.superview isKindOfClass:[UITableView class]])
return (UITableView *)self.superview;
else if ([self.superview.superview isKindOfClass:[UITableView class]])
return (UITableView *)self.superview.superview;
else
{
NSAssert(NO, @"UITableView shall always be found.");
return nil;
}
}
@end
이것은을 (를) 사용하기위한 좋은 드롭 인 대체물 cell.superview
이며 기존 코드를 쉽게 리팩터링 할 수 있습니다. 검색하고로 바꾸고 [cell relatedTable]
어설 션을 던져 뷰 계층 구조가 나중에 변경되거나 되돌릴 경우 즉시 표시되도록합니다. 당신의 테스트에서.
솔루션 # 2 : 약한 UITableView
참조 추가UITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
기존 프로젝트에서 사용하려면 더 많은 코드 리팩토링이 필요하지만 훨씬 더 나은 디자인입니다. 당신에 tableView:cellForRowAtIndexPath
휴대 클래스로 사용 SOUITableViewCell 또는 있는지 확인하여 사용자 정의 셀 클래스에서 서브 클래스되는 SOUITableViewCell
셀의있는 tableView 속성에있는 tableView를 할당합니다. 그런 다음 셀 내부에서를 사용하여 포함하는 tableview를 참조 할 수 있습니다 self.tableView
.