ก่อน 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
ที่มีการใช้