ก่อน iOS7 ซูเปอร์วิวของเซลล์คือสิ่งUITableViewที่มีอยู่ ในฐานะของ iOS7 จีเอ็ม (เพื่อให้สันนิษฐานว่าจะเป็นในรุ่นประชาชนเช่นกัน) SuperView ของเซลล์เป็นUITableViewWrapperViewกับ SuperView 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ทำให้ง่ายต่อการ refactor โค้ดที่มีอยู่ของคุณเพียงแค่ค้นหาและแทนที่ด้วย[cell relatedTable]และยืนยันเพื่อให้แน่ใจว่าหากลำดับชั้นของการดูเปลี่ยนแปลงหรือย้อนกลับในอนาคตจะแสดงขึ้นทันที ในการทดสอบของคุณ
โซลูชัน # 2: เพิ่มการUITableViewอ้างอิงที่อ่อนแอลงในUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
นี่เป็นการออกแบบที่ดีกว่ามากแม้ว่าจะต้องใช้การปรับโครงสร้างโค้ดอีกเล็กน้อยเพื่อใช้ในโครงการที่มีอยู่ ในการtableView:cellForRowAtIndexPathใช้ SOUITableViewCell ของคุณเป็นคลาสเซลล์ของคุณหรือตรวจสอบให้แน่ใจว่าคลาสเซลล์ที่กำหนดเองของคุณเป็นคลาสย่อยจากSOUITableViewCellและกำหนด tableView ให้กับคุณสมบัติ tableView ของเซลล์ ภายในเซลล์แล้วคุณสามารถดูที่ tableview self.tableViewที่มีการใช้