2011-04-07 11 views
33

कुछ IBAction में मैंने देखा:उद्देश्य सी: "(आईडी) प्रेषक क्या है"?

- (IBAction)pushButton:(id)sender; 

यह (id)sender मैं इसे जब प्रयोग करते हैं?

+3

नोट आप कर सकते हैं [कोड के रूप में प्रारूप लाइनों] (http://meta.stackexchange.com/questions/22186/how-do-i- प्रारूप-मेरे-कोड-ब्लॉक) उन्हें चार रिक्त स्थान इंडेंट करके। एक अग्रणी '-', इसके विपरीत, आपको एक सूची तत्व देता है, जैसा कि आप अपनी क्यू में देख सकते हैं stion। संपादक टूलबार में "{}" बटन आपके लिए यह करता है। अपना प्रश्न संपादित करें और इसे आज़माएं। फ़ॉर्मेटिंग पर अधिक जानकारी और युक्तियों के लिए संपादक टूलबार में नारंगी प्रश्न चिह्न पर क्लिक करें। – outis

उत्तर

33
(id)sender is the object which sent the message to that selector. 

कोड उदाहरण:

- (IBAction)submitButton:(id)sender { 
    UIButton *button = (UIButton *)sender; 
    [button setEnabled:NO]; 
    [button setTitle:@"foo" forState:UIControlStateDisabled]; 
} 
+0

ठीक है, लेकिन आप केवल "बटन" के लिए इस आईडी प्रेषक का उपयोग कर सकते हैं; अगर मुझे टेक्स्टफील्ड को संशोधित करना है, तो रास्ता क्या है? – CrazyDev

+0

@blackguardian: क्या आपका मतलब है कि आप आईडी को UITextField में डालना चाहते हैं और फिर उसका टेक्स्ट बदलना चाहते हैं? –

+0

हाँ ............ – CrazyDev

62

मैट गैलोवे thusly iPhone देव एसडीके मंचों पर होने वाली गतिविधियों में (id) sender के अर्थ का वर्णन किया:

(आईडी) इस वस्तु जो कि चयनकर्ता के संदेश भेजा है। यह प्रतिनिधि कार्यों में है जहां आपके पास फ़ंक्शन में नियंत्रण है, आदि

यदि आप 2 ऑब्जेक्ट्स थे जो चयनकर्ता को बुला रहे थे और आप उनके बीच अंतर करना चाहते थे। बेशक, आप केवल दो अलग-अलग कार्यों का उपयोग कर सकते हैं, लेकिन यह एक फ़ंक्शन का उपयोग करने के लिए अक्सर क्लीनर और कोड का कम डुप्लिकेशंस होता है।

अधिक जानकारी के लिए UIControl Class Reference देखें।

-(IBAction) editingEnded:(id) sender { 
    // the cast goes here, lets assume there's more than one UITextfield 
    // in this Owner and you want to know which one of them has triggered 
    // the "editingEnded" delegate 
    UITextField *textField= (UITextField*)sender; 
    if(textfield == iAmTheLastTextField) 
    { 
    // for example login now. 
    [self login]; 
    } 
} 
+13

यह उत्तर वास्तव में उस उत्तर से बेहतर है जिसे स्वीकार कर लिया गया है ... –

4

"प्रेषक" चर का नाम है:


उस के लिए एक उदाहरण है, UITextField एक प्रतिनिधि जो चलाता है जब UITextField संपादन समाप्त होता है।

"(आईडी)" का अर्थ है कि चर के प्रकार के "आईडी", कि "किसी भी वस्तु" के खड़ा है (आप वस्तु पदानुक्रम के शीर्ष के रूप में इसे देख सकते हैं अगर आप

के नाम चाहते हैं विधि पुशबटन है:। और किसी भी तरह के 1 पैरामीटर की आवश्यकता होती है

इस विधि यूआई पर एक बटन से लिंक किया जाएगा इस यूआई के प्रतिनिधि इस कॉल आएगी और UIButton है कि के लिए एक संदर्भ होगा। कॉल किया। कभी-कभी आपको इसकी आवश्यकता नहीं होती है, कभी-कभी आपको उस UIButton तक पहुंच के लिए अपनी गुणों को बदलने की आवश्यकता होती है।

1

यह कोको के target-action mechanism का हिस्सा है, जो एक ही तरह की वस्तुएं एक दूसरे के साथ संवाद कर सकती हैं। किसी ईवेंट (जैसे माउस क्लिक) के जवाब में, एक ऑब्जेक्ट (आमतौर पर किसी प्रकार का नियंत्रण) किसी अन्य ऑब्जेक्ट को संदेश भेजता है। प्रेषक को, "प्रेषक" कहा जाता है, रिसीवर "लक्ष्य" है और संदेश "कार्रवाई" है।

प्रेषक से कार्रवाई के बारे में अतिरिक्त जानकारी प्राप्त करने के लिए आप इसे लक्ष्य के संदेश हैंडलर में उपयोग कर सकते हैं।

+0

यह अतिरिक्त उपयोगी होगा कि अतिरिक्त जानकारी कैसे प्राप्त करें, उदाहरण के लिए कोई उदाहरण था :) –

+0

@GForty: संभव नहीं है, क्योंकि 'id' एक सामान्य वस्तु है। आम तौर पर, यह एक NSObject है, लेकिन इस प्रकार से अधिक निश्चित नहीं है। यदि आप अतिरिक्त जानकारी चाहते हैं, तो आपको पता होना चाहिए कि वस्तु किस प्रकार इंटरफेस लागू करती है और उचित संदेश (ओं) को भेजती है (जैसे गोंट्नुल के नमूने में, जहां प्रेषक को बटन माना जाता है)। – outis

0

मैं Rabskatran से सीखा है। लेकिन मैं एकमात्र भाग को सही करना चाहता हूं जो कहता है कि "प्रेषक" चर का नाम है। यह होना चाहिए (ऐप्पल प्रलेखन से - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):

"क्रिया संदेशों द्वारा बुलाए गए तरीकों में एक विशिष्ट हस्ताक्षर होता है: एक संदेश जिसमें क्रिया संदेश शुरू करने वाली वस्तु का संदर्भ होता है; सम्मेलन द्वारा, इस पैरामीटर का नाम है प्रेषक।उदाहरण के लिए,

  • (शून्य) moveToEndOfLine: (आईडी) प्रेषक; // NSResponder.h "से

इसलिए यह एक पैरामीटर है!

0

यहाँ की (आईडी) इस एक IBAction के लिए कई बटन से टैग जानकारी गुजर एक उदाहरण है। इस वीडियो की अवधारणा को दर्शाता है (आईडी) कार्रवाई में इस है, जो मैंने पाया बहुत उपयोगी हो सकते हैं।

iPhone Programming - (id)sender explained

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