2008-11-24 6 views
7

प्रबंधित करने के लिए एक प्रतिनिधि का उपयोग करके मेरे पास दो UIActionSheets हैं और मैं सोच रहा हूं कि मैं उन्हें एक प्रतिनिधि (UIViewController जो उन्हें तत्काल करता हूं) के साथ नियंत्रित करेगा। प्रतिनिधि एक एक्शनशीट कॉल पर कब्जा करेगा और यह पता लगाने की कोशिश करेगा कि दोनों ने किस कार्यक्रम को फेंक दिया था।दो UIActionSheets

मैं अलग करने के लिए modalView के शीर्षक प्राप्त करने की कोशिश, लेकिन यह अमान्य प्रतीत होता है ...

इस काम करना चाहिए?

यदि नहीं, तो क्या यूआईएक्शनशीट ने इस कार्यक्रम को अलग करने का कोई और तरीका है?

या क्या मुझे दो अलग-अलग वर्ग बनाने की ज़रूरत है जो प्रत्येक यूआईएक्शन शीट के लिए अलग-अलग प्रतिनिधि होंगे?

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

उत्तर

44

मुझे लगता है कि आपको टैगUIActionSheet की संपत्ति की आवश्यकता है।

कुछ की तरह:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle ... ]; 
actionSheet.tag = 10; 
[actionSheet showInView:self.view]; 
फिर अपने प्रतिनिधि में

:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    switch (actionSheet.tag) { 
    case 10: 
     ... 
    } 
} 

टैगकी संपत्ति UIView है और वह वहां भी दिखाई देते हैं घटकों के लिए इंटरफ़ेस बिल्डर में सेट किया जा सकता। काफी आसान, हालांकि मैंने वास्तव में कभी भी इस संदर्भ में इसका उपयोग नहीं किया है।

+1

स्टीफन ने मुझे पंच पर मार दिया। यह वास्तव में तकनीक है जिसका मैं उपयोग करता हूं। टैग संपत्ति इस तरह के मामलों के लिए काफी आसान है। मैं इसका उपयोग तब भी करता हूं जब मैं गतिशील रूप से यूआई उत्पन्न करता हूं जहां उप-दृश्यों की संख्या रनटाइम पर निर्धारित होती है। – Jablair

+0

बढ़िया, यह बहुत अच्छा काम किया। धन्यवाद! –

+0

"टैग" एक शानदार टिप है - शानदार। – Fattie

9

कोको में प्रतिनिधि विधियों में इस उद्देश्य के लिए प्रेषण वस्तु शामिल है। अपने कंट्रोलर क्लास में इंस्टेंस वैरिएबल के रूप में अपनी प्रत्येक एक्शन शीट का संदर्भ रखें, और आप यह तय करने के लिए अपने प्रतिनिधि तरीकों में एक्शनशीट पैरामीटर से इसकी तुलना कर सकते हैं कि आपको कौन से कार्यों को करने की आवश्यकता है।

दृश्य की टैग संपत्ति का उपयोग करना काम करेगा, लेकिन संदर्भ रखना आसान होगा। टैग प्रॉपर्टी आपको दृश्य देखने में मदद करने के लिए है, यदि आप उप-विचारों के पदानुक्रम को देख रहे हैं और आपके पास आवश्यक ऑब्जेक्ट का संदर्भ नहीं है।

6

आपको एक्शनशीट सूचक का उपयोग प्रतिनिधि की विधि को पारित करना चाहिए क्योंकि मार्क ने कहा था। उदाहरण के लिए:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if(actionSheet == myDoSomethingActionSheet) { 
     if(buttonIndex == 0) { 
      [self doThingA]; 
      return; 
     } 
     if(buttonIndex == 1) { 
      [self doThingB]; 
      return; 
     } 
    } 
    if(actionSheet == myOtherActionSheet) { 
     if(buttonIndex == 3) { 
      [self doImportantThing]; 
      return; 
     } 
    } 
}