2009-11-24 14 views
5

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

मैं विशेष रूप से जानना चाहता हूं कि कई ऑब्जेक्ट्स के साथ प्रतिनिधियों का उपयोग कैसे करें। जहां तक ​​मुझे पता है, एक वस्तु के लिए एक ही प्रतिनिधि को निर्दिष्ट करना (उदा। टेबल सेल) एक ही समय में दोनों कोशिकाओं के लिए एक ही घटना को बुलाया जाएगा। क्या किसी विशेष वस्तु के लिए प्रतिनिधि को तत्काल करने के बराबर कुछ भी है?

अग्रिम धन्यवाद!

उत्तर

6

पसंद आया कोको में, लगभग हमेशा खुद की पहचान जब एक प्रतिनिधि विधि बुला वस्तुओं। उदाहरण के लिए, UITableView जब यह बुला प्रतिनिधि संदेश के पहले पैरामीटर के रूप में ही गुजरता है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

आप एक से अधिक UITableViews को संभालने के लिए एक ही प्रतिनिधि चाहता था, तो आप सिर्फ एक tableView वस्तु को पारित कर दिया पर कुछ सशर्त जरूरत विधि:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.myFirstTableView) { 
     // do stuff 
    } else if (tableView == self.mySecondtableView) { 
     // do other stuff 
    } 
} 

}

आप वस्तु संकेत सीधे तुलना करने के लिए नहीं करना चाहते हैं, तो आप हमेशा tag संपत्ति का उपयोग अद्वितीय रूप से आपके विचारों पहचान कर सकते हैं।

-1
+3

बात यह है कि, "प्रतिनिधि" का मतलब कोको पैरालांस में समान नहीं है क्योंकि यह .NET Framework में करता है। –

+0

आह हाँ ... प्रश्न पर "उद्देश्य-सी" टैग नहीं देखा। धन्यवाद। – PatrickSteele

2

आमतौर पर, यदि आपके पास एक प्रतिनिधि विधि है जो कई अलग-अलग ऑब्जेक्ट्स से संदेश प्राप्त कर सकती है, तो आपके पास बस कॉलिंग ऑब्जेक्ट संदेश (विधि कॉल) में प्रतिनिधि को पास कर लेता है।

उदाहरण के लिए, यदि आप एक tableviewcell के लेबल से पाठ निकाल के लिए एक प्रतिनिधि तरीका चाहते थे, विधि परिभाषा कुछ ऐसा दिखाई देगा:

:

-(void) extractTextFromLabelOfTableCell:(UITableViewCell *) theCallingCell{ 
... 
NSString *extractedText=theCallingCell.textLabel.text; 
} 

आप एक tableviewcell thusly से विधि कहेंगे

[delegate extractTextFromLabelOfTableCell:self]; 

टेबलव्यूसेल का प्रत्येक उदाहरण खुद को प्रतिनिधि को भेज देगा और प्रतिनिधि उस उदाहरण के पाठ को निकाल देगा। इस तरह, एक प्रतिनिधि प्रतिनिधि वस्तु मनमाने ढंग से बड़ी संख्या में कोशिकाओं को संभाल सकती है।

1

एक प्रतिनिधि वर्ग के बिना किसी वर्ग के नियंत्रक को जोड़ने के लिए कक्षा में व्यवहार जोड़ने का एक तरीका है।

तालिका दृश्य उदाहरण में आपने दिया, प्रतिनिधि तालिका को विस्तारित या नियंत्रित कर रहा है, सेल नहीं। तालिका को नियंत्रक रखने के लिए डिज़ाइन किया गया है, सेल नहीं है। यह डिज़ाइन विकल्प यह है कि आप सेल-विशिष्ट प्रतिनिधियों को निर्दिष्ट क्यों नहीं कर सकते हैं।

हालांकि, प्रतिनिधि विधियां हमेशा स्रोत ऑब्जेक्ट (जिसे प्रतिनिधि प्रतिनिधि संलग्न किया जाता है) और प्रासंगिक पैरामीटर (जैसे सेल शामिल है) की घोषणा करेगा ताकि आपको हमेशा कार्रवाई को पूरी तरह से संभालने में सक्षम होना चाहिए।

आपके मामले में, यदि आपके पास सेल है और आप सेल को स्वयं प्रबंधित करना चाहते हैं, तो प्रतिनिधि विधि (जो शायद आपके UITableViewController पर लागू की जाएगी) आसानी से सेल को NSIndexPath (प्रतिनिधि विधि के लिए पैरामीटर के रूप में पारित) और अपने काम करने के लिए सेल सबक्लास पर एक विधि का आह्वान किया।

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