यहाँ एक और उपाय है जो थोड़ा अलग है।
मेरे पास कुछ दृश्य पदानुक्रम के मुद्दों के कारण मुझे इसका उपयोग करना पड़ा: मैं कुछ कार्यक्षमता बना रहा था, जो दृश्य पदानुक्रम में विभिन्न स्थानों के लिए पासिंग व्यू की आवश्यकता थी, जो UITableViewController के टेबलव्यू b / c का उपयोग करते समय टूट जाता है, तालिका दृश्य UITableViewController का मूल दृश्य है self.view) और न केवल एक नियमित दृश्य, इसने असंगत नियंत्रक / दृश्य पदानुक्रम बनाए और दुर्घटना का कारण बना।
मूल रूप से UITableViewController के अपने स्वयं के उपवर्ग बनाएं और self.view को अलग दृश्य देने के लिए loadView और ओवरराइड ओवरराइड करें, और एक अलग तालिका दृश्य वापस करने के लिए tableView गुण को ओवरराइड करें।
उदाहरण के लिए:
@interface MyTableVC : UITableViewController
@end
@interface MyTableVC ()
@property (nonatomic, strong) UITableView *separateTableView;
@end
@implementation MyTableVC
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:CGRectZero];
}
- (UITableView *)tableView {
return self.separateTableView;
}
- (void)setTableView:(UITableView *)tableView {
self.separateTableView = tableView;
}
@end
जब केलर के समाधान के साथ संयुक्त इस अर्थ में अधिक मजबूत होगा कि टेबल व्यू अब एक नियमित दृश्य है, न कि वीसी का मूल दृष्टिकोण, और दृश्य पदानुक्रमों के खिलाफ अधिक मजबूत होना। इस तरह इसका उपयोग करने का उदाहरण:
MyTableVC *tableViewController = [[MyTableVC alloc] init];
tableViewController.tableView = self.myTableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;
इसके लिए एक और संभावित उपयोग है:
चूँकि इस तरह से उपवर्ग करना self.able को self.tableView से अलग करता है, इसलिए अब इस UITableViewController को एक नियमित नियंत्रक के रूप में उपयोग करना संभव है, और UITableView में साक्षात्कार जोड़ने की विषमताओं के बिना self.view में अन्य साक्षात्कार जोड़ें, इसलिए कोई भी उनके बनाने पर विचार कर सकता है। नियंत्रक UITableViewController बच्चों के बजाय सीधे UITableViewController का एक उपवर्ग देखें।
कुछ चीजें देखने के लिए:
चूंकि हम सुपर को कॉल किए बिना टेबल व्यू की संपत्ति को ओवरराइड कर रहे हैं, इसलिए कुछ चीजें देखने के लिए हो सकती हैं और जहां आवश्यक हो उसे संभालना चाहिए। उदाहरण के लिए, मेरे ऊपर के उदाहरण में टेबलव्यू सेट करने से टेबलव्यू को स्व.व्यू में नहीं जोड़ा जाएगा और उस फ्रेम को सेट नहीं किया जाएगा जिसे आप करना चाहते हैं। इसके अलावा, इस कार्यान्वयन में क्लास के तत्काल होने पर आपको कोई डिफ़ॉल्ट तालिका दृश्य नहीं दिया जाता है, जो कि कुछ ऐसी चीज है जिसे आप जोड़ने पर विचार कर सकते हैं। मैं इसे यहां शामिल नहीं करता हूं क्योंकि यह मामला है, और यह समाधान वास्तव में केलर के समाधान के साथ अच्छी तरह से फिट बैठता है।