2012-06-23 14 views
6

से कनेक्ट नहीं होंगे। मैं अपने कस्टम प्रतिनिधि वर्ग में स्टोरीबोर्ड के भीतर डेटा आउटसोर्स और तालिका दृश्य के आउटलेट को आउटलेट करने में असमर्थ हूं। मैं उन तालिका कार्यों को किसी अन्य वर्ग में प्रतिनिधि देना चाहता हूं। स्टोरीबोर्ड में प्रतिनिधिमंडल, आउटलेट और तारों की चीजों के बारे में मैंने कुछ मूलभूत रूप से गलत समझा है।UITableView डेटासोर्स और प्रतिनिधि कस्टम क्लास

पृष्ठभूमि

मैं एक UIViewController एक UIPickerView युक्त दृश्य वाली और अन्य बातों के साथ एक UITableView है।
मैं उस बिंदु तक पहुंच गया हूं जहां मेरा UIViewController बहुत बड़ा है और मैं तालिका से संबंधित कार्यों को किसी अन्य वर्ग में ले जाना चाहता हूं।

मैंने उन तालिका विधियों को रखने के लिए निम्न श्रेणी बनाई है जैसे numberOfSectionsInTableView:

@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) ExerciseDataController *dataController; 

@end 

मैं में ऊपर वर्ग के लिए एक संदर्भ डाल करने के लिए सोचा है मेरी UIViewController

@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> 
{ 
    UIPickerView *exercisePicker; 
} 

@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate; 

@end 

मुझे उम्मीद थी कि स्टोरीबोर्ड के भीतर, जब मैं अपने तालिका के डेटा स्रोत या प्रतिनिधि दुकानों में से एक खींचें UITableViewController पर देखें, यह मुझे मेरे प्रतिनिधि वर्ग से जुड़ने की क्षमता देगा। ऐसा नहीं हुआ

मैंने फिर स्टोरीबोर्ड के भीतर एक ऑब्जेक्ट बनाने की कोशिश की, इसे ExerciseTableDelegate वर्ग दिया। मैं ऑब्जेक्ट में टेबल व्यू प्रतिनिधि को खींच सकता था, लेकिन यह वही ऑब्जेक्ट नहीं है जिसे मैंने अपने AppDelegate में सेट किया था।

मेरा ऐप प्रतिनिधि

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0]; 

    ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init]; 
    ExerciseDataController *dataController = [[ExerciseDataController alloc] init]; 

    tableDelegate.dataController = dataController; 
    rootViewController.tableDelegate = tableDelegate; 

    // Override point for customization after application launch. 
    return YES; 
} 
  • मैं अपने वस्तु एक सिंगलटन बनाने के लिए और अभी भी प्रतिनिधि में यह आरंभ की ज़रूरत है?
  • क्या मुझे स्टोरीबोर्ड की बजाय कोड में यह सेटअप करने की आवश्यकता है?
  • स्टोरीबोर्ड में कोई ऑब्जेक्ट गलत विचार है?

मुझे लगता है कि मैं करीब हूं लेकिन मुझे लगता है कि मैं बहुत कुछ कर रहा हूं।

उत्तर

1

यदि आप अपने आवेदन प्रतिनिधि में स्थापित ExerciseTableDelegate के उदाहरण तक पहुंच चाहते हैं, तो आपको इसे कोड में अपने टेबल व्यू से कनेक्ट करना होगा, क्योंकि यह स्टोरीबोर्ड से पहुंच योग्य नहीं होगा - जैसा कि आप ' मैंने पाया है, स्टोरीबोर्ड में एक नई वस्तु जोड़ना एक नया उदाहरण बनाता है।

सौभाग्य से, यह लागू करने के लिए बहुत आसान है। अपने तालिका दृश्य नियंत्रक के viewDidLoad विधि में, जोड़ने निम्नलिखित:

self.tableView.delegate = self.tableDelegate; 
self.tableView.datasource = self.tableDelegate; 

यह पुन: बिंदु डेटा स्रोत और अपने अलग वस्तु प्रतिनिधि।

+0

धन्यवाद @ jrturton। वह चाल है। इसके अलावा, मुझे ExerciseViewControllers tableView के लिए आईबीओलेट बनाने के लिए मानक चीज करने की आवश्यकता है और स्टोरीबोर्ड में इसे तार करने की आवश्यकता है। – AllTheThingsICanDo

संबंधित मुद्दे