IOS7 से पहले, सेल का सुपरवाइज वह था UITableViewजिसमें यह निहित था। IOS7 GM (जैसा कि संभवतः सार्वजनिक रिलीज में भी होगा) के रूप में, सेल का सुपरवाइड 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और तालिका के दृश्य को सेल की तालिका दृश्य संपत्ति में असाइन करें। फिर सेल के अंदर आप उपयोग करने वाले टेबलव्यू को संदर्भित कर सकते हैं self.tableView।