Trước iOS7, superview của ô là thứ UITableView
chứa nó. Đối với iOS7 GM (có lẽ cũng sẽ được phát hành công khai), superview của tế bào là một UITableViewWrapperView
với superview của nó là UITableView
. Có hai giải pháp cho vấn đề.
Giải pháp số 1: Tạo một UITableViewCell
danh mục
@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
Đây là một sự thay thế tốt để sử dụng cell.superview
, giúp bạn dễ dàng cấu trúc lại mã hiện tại của mình - chỉ cần tìm kiếm và thay thế bằng [cell relatedTable]
và đưa ra một xác nhận để đảm bảo rằng nếu hệ thống phân cấp chế độ xem thay đổi hoặc hoàn nguyên trong tương lai, nó sẽ hiển thị ngay lập tức trong các bài kiểm tra của bạn.
Giải pháp # 2: Thêm UITableView
tham chiếu yếu vàoUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Đây là một thiết kế tốt hơn nhiều, mặc dù nó sẽ yêu cầu cấu trúc lại mã nhiều hơn một chút để sử dụng trong các dự án hiện có. Khi tableView:cellForRowAtIndexPath
sử dụng SOUITableViewCell làm lớp ô của bạn hoặc đảm bảo rằng lớp ô tùy chỉnh của bạn được phân lớp từ đó SOUITableViewCell
và gán tableView cho thuộc tính tableView của ô. Sau đó, bên trong ô, bạn có thể tham chiếu đến chế độ xem bảng chứa bằng cách sử dụng self.tableView
.