IBOutlet और IBAction


159

Xcode और इंटरफ़ेस बिल्डर में IBOutlets और IBActions का उपयोग करने का उद्देश्य क्या है?

अगर मैं IBOutlets और IBActions का उपयोग नहीं करता हूं तो क्या इससे कोई फ़र्क पड़ता है?


स्विफ्ट:

@IBOutlet weak var textField: UITextField!

@IBAction func buttonPressed(_ sender: Any) { /* ... */ }

उद्देश्य सी:

@property (nonatomic, weak) IBOutlet UITextField *textField;

- (IBAction)buttonPressed:(id)sender { /* ... */ }

12
सभी उत्तरों में एक ही प्रकार के विचार का उल्लेख किया गया है .. लेकिन कोई भी यह नहीं बताता है कि यदि आप अपने स्रोत में IBAction / IBOutlet को शामिल नहीं करते हैं तो इंटरफ़ेस बिल्डर सिर्फ एक ही काम क्यों करता है। क्या IBAction और IBOutlet के लिए एक और कारण है या क्या उन्हें छोड़ देना ठीक है ?
bobobobo

2
नीचे माइकल रोजर्स का जवाब इस बात की व्याख्या करता है कि IBAction बाहर होने पर भी कोड क्यों काम करता है।
कृष्णा

IBActions लक्ष्य-एक्शन इंटरैक्शन तंत्र के हिस्से के रूप में मौजूद है, आप पढ़ सकते हैं कि IBAction यहां कैसे फिट बैठता है: developer.apple.com/library/ios/documentation/General/… आप यहां आउटलेट्स पर पढ़ सकते हैं: डेवलपर
विलियम पावर

जवाबों:


208

IBAction तथा IBOutlet मैक्रोज़ को वेरिएबल और तरीकों को दर्शाने के लिए परिभाषित किया जाता है जिन्हें इंटरफ़ेस बिल्डर में संदर्भित किया जा सकता है।

IBActionपर ले कर जाता voidहै औरIBOutlet कुछ भी नहीं करने के लिए हल करता है, लेकिन वे एक्सकोड और इंटरफ़ेस बिल्डर को संकेत देते हैं कि इन चर और तरीकों का उपयोग यूआई तत्वों को आपके कोड से जोड़ने के लिए इंटरफ़ेस बिल्डर में किया जा सकता है।

यदि आप इंटरफ़ेस बिल्डर का उपयोग नहीं करने जा रहे हैं, तो आपको उनके कोड की आवश्यकता नहीं है, लेकिन यदि आप इसका उपयोग करने जा रहे हैं, तो आपको IBActionउन तरीकों के लिए निर्दिष्ट करने की आवश्यकता है जो आईबी और IBOutletवस्तुओं के लिए उपयोग किए जाएंगे। इसका उपयोग IB में किया जाएगा।


@ जसारिएन "आपको आईबी में उपयोग की जाने वाली विधियों और आईबी में उपयोग की जाने वाली वस्तुओं के लिए आईबीबीएट निर्दिष्ट करने की आवश्यकता है।" क्या फर्क पड़ता है ?
सिरिलचम्पियर

3
@nerith वही अंतर जो विधियों और वस्तुओं के बीच मौजूद है। तरीकों के लिए IBActions, वस्तुओं के लिए IBOutlet।
जसरीन

बस स्पष्ट करने के लिए, चूंकि मेरी पोस्ट संपादित की गई थी, IBOutletहल नहीं होती है id। इस पर विचार करें: IBOutlet UILabel *nameLabel;- यदि इसका IBOutletसमाधान किया जाता है id, तो वह कोड पढ़ेगा id UIlabel *namelabel;जो संकलक त्रुटि पैदा करता है। जैसा कि मैंने मूल रूप से कहा था, IBOutletकुछ भी नहीं करने का संकल्प करता है।
जसारीन

38

एक विधि को ध्वजांकित करने का पारंपरिक तरीका ताकि यह इंटरफ़ेस बिल्डर में दिखाई दे, और आप इसके लिए एक कनेक्शन खींच सकते हैं, यह विधि वापसी प्रकार IBAction बनाने के लिए किया गया है। हालाँकि, यदि आप अपनी विधि को शून्य बनाते हैं, इसके बजाय (IBAction # परिभाषित करना शून्य है), और (id) तर्क प्रदान करते हैं, तो विधि अभी भी दिखाई दे रही है। यह अतिरिक्त लचीलापन प्रदान करता है, अल

ये सभी 3 इंटरफ़ेस बिल्डर से दिखाई देते हैं:

-(void) someMethod1:(id) sender; 
-(IBAction) someMethod2; 
-(IBAction) someMethod3:(id) sender;

विवरण के लिए Apple के इंटरफ़ेस बिल्डर उपयोगकर्ता मार्गदर्शिका देखें, विशेष रूप से Xcode एकीकरण का अनुभाग।


1
यहाँ उपर्युक्त मार्गदर्शिका का लिंक दिया गया है: developer.apple.com/library/ios/recipes/…
अग्रेंजी

32

यदि आप अपने GUI घटकों के लिए इंटरफ़ेस बिल्डर (इसलिए IB उपसर्ग) का उपयोग कर रहे हैं तो आपको IBOutlet और IBAction का उपयोग करने की आवश्यकता है। आईबी में घटकों के साथ आपके आवेदन में संपत्तियों को जोड़ने के लिए IBOutlet की आवश्यकता होती है, और आईबीएक्शन का उपयोग आपके तरीकों को आईबी में क्रियाओं से जुड़े रहने की अनुमति देने के लिए किया जाता है।

उदाहरण के लिए, मान लें कि आप IB में एक बटन और लेबल परिभाषित करते हैं। बटन को दबाकर लेबल के मूल्य को गतिशील रूप से बदलने के लिए, आप अपने ऐप में एक क्रिया और संपत्ति को समान रूप से परिभाषित करेंगे:

UILabel IBOutlet *myLabel;
- (IBAction)pushme:(id)sender;

फिर IB में आप myLabel को लेबल के साथ जोड़ेंगे और पुशमे विधि को बटन के साथ जोड़ेंगे। इन कनेक्शनों के आईबी में मौजूद होने के लिए आपको IBAction और IBOutlet की आवश्यकता है।


13
लेकिन क्यों यह अभी भी काम करता है यदि आप IBOutlet लेबलिंग को शामिल नहीं करते हैं ..?
18ob में 18

7
क्योंकि ये मैक्रोज़ कंपाइल समय पर कुछ नहीं करते हैं, वे बस इसलिए हैं कि इंटरफ़ेस बिल्ड ऐप उन विधियों और इंटरफ़ेस बिल्डर फ़ाइलों को स्रोत कोड में पा सकते हैं ताकि आप इंटरफ़ेस बिल्डर और आपके कोड के बीच खींच सकें, एक कनेक्शन ऐसा नहीं होता है कोई और बात।
नाथन डे

आईबीएक्शन कम-से-कम पिछले एक दशक से संपादन-समय पर कुछ भी नहीं करता है। आप (void)इंटरफ़ेस बिल्डर में एक विधि भी कनेक्ट कर सकते हैं ।
जे कोको

7

इंटरफ़ेस बिल्डर उन्हें यह निर्धारित करने के लिए उपयोग करता है कि आपके विंडो / दृश्य में आपके द्वारा उपयोग किए जा रहे इंटरफ़ेस नियंत्रण तक सदस्यों और संदेशों को 'वायर्ड' किया जा सकता है।

IBOutlet और IBAction विशुद्ध रूप से मार्करों के रूप में होते हैं जो इंटरफ़ेस बिल्डर तब दिखता है जब यह डिज़ाइन समय पर आपके कोड को पार्स करता है, उन्हें कंपाइलर द्वारा उत्पन्न कोड पर कोई प्रभाव नहीं पड़ता है।


7

कुंजी-मूल्य कोडिंग को देखते हुए आरेख में भाग गया, सोचा कि यह किसी की मदद कर सकता है। यह समझने में मदद करता है कि IBOutlet क्या है।

प्रवाह को देखकर, कोई देख सकता है कि निब फ़ाइल में नियंत्रण नाम के साथ संपत्ति के नाम से मेल खाने के लिए IBOutlets ही हैं।

निब फ़ाइल कैसे भरी जाती है, iOS6 के लिए मैट की ऑनलाइन पुस्तक का स्क्रीनशॉट


यह उत्तर बताता है कि क्यों और कैसे IBOutlets काम करते हैं, न कि वे क्या करते हैं
जेफरी ओपोकू-मेन्सा

4

एक आउटलेट यूआई के लिए कोड से एक लिंक है। यदि आप एक UI तत्व दिखाना या छुपाना चाहते हैं, यदि आप एक टेक्स्टफील्ड का पाठ प्राप्त करना चाहते हैं या किसी तत्व (या सौ अन्य चीजों) को सक्षम या अक्षम करना चाहते हैं, तो आपको स्रोतों में उस वस्तु के एक आउटलेट को परिभाषित करना होगा और उस आउटलेट को लिंक करना होगा। UI तत्व के लिए "इंटरफ़ेस ऑब्जेक्ट" के माध्यम से। उसके बाद आप अपनी कोडिंग में किसी अन्य चर की तरह ही आउटलेट का उपयोग कर सकते हैं।

IBAction - उपयोगकर्ता-इंटरफ़ेस ऑब्जेक्ट द्वारा ट्रिगर एक विशेष विधि। इंटरफ़ेस बिल्डर उन्हें पहचानता है।

@interface Controller
{
  IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

अधिक जानकारी के लिए कृपया Apple डॉक्स देखें


उह, नहीं, यह एक IBOutlet नहीं है। आपको यह विचार कहाँ से मिला?
रिचर्ड जे। रॉस III

3

IBAction और IBOutlets का उपयोग इंटरफ़ेस बिल्डर में आपके इंटरफ़ेस को आपके नियंत्रक के साथ हुक करने के लिए किया जाता है। यदि आप इंटरफ़ेस बिल्डर का उपयोग नहीं करेंगे और अपने इंटरफ़ेस को पूरी तरह से कोड में बनाएंगे, तो आप उनका उपयोग किए बिना एक कार्यक्रम बना सकते हैं। लेकिन वास्तव में हम में से अधिकांश इंटरफ़ेस बिल्डर का उपयोग करते हैं, एक बार जब आप अपने इंटरफ़ेस में कुछ अन्तरक्रियाशीलता प्राप्त करना चाहते हैं, तो आपको IBActions और IBoutlets का उपयोग करना होगा।


2

IBOutlet

  • यह एक संपत्ति है
  • जब निब (आईबी) फ़ाइल लोड की जाती है, तो यह एनकैप्सुलेटेड डेटा का हिस्सा बन जाता है जो एक इंस्टेंस वेरिएबल से कनेक्ट होता है।
  • प्रत्येक कनेक्शन अनारक्षित और पुन: स्थापित है।

IBAction

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

@ - डायनेमिक पैटर्न IB - इंटरफ़ेस बिल्डर


2

इस सवाल पर शीर्ष टिप्पणियों में से एक विशेष रूप से पूछता है:

सभी उत्तरों में एक ही प्रकार के विचार का उल्लेख किया गया है .. लेकिन कोई भी यह नहीं बताता है कि यदि आप अपने स्रोत में IBAction / IBOutlet को शामिल नहीं करते हैं तो इंटरफ़ेस बिल्डर सिर्फ एक ही काम क्यों करता है। क्या IBAction और IBOutlet के लिए एक और कारण है या क्या उन्हें छोड़ देना ठीक है?


इस प्रश्न का उत्तर NSHipster ने अच्छी तरह दिया है:

IBAction

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction

2004 की शुरुआत (और शायद पहले) के रूप में, IBAction इंटरफ़ेस बिल्डर द्वारा देखे जाने के लिए एक विधि के लिए आवश्यक नहीं था । हस्ताक्षर के साथ कोई भी विधि -(void){name}:(id)senderआउटलेट फलक में दिखाई देगी।

फिर भी, कई डेवलपर्स अभी भी उपयोगी हैं IBAction वापसी प्रकार का उपयोग विधि घोषणाओं में यह दर्शाने के लिए कि एक विशेष विधि एक कार्रवाई द्वारा जुड़ी हुई है। यहां तक ​​कि स्टोरीबोर्ड / XIB का उपयोग नहीं करने वाली परियोजनाएं लक्ष्य / कार्रवाई विधियों को कॉल करने के लिए IBAction को नियोजित करने का विकल्प चुन सकती हैं।

IBOutlet:

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet

IBAction के विपरीत, IBOutlet को स्टोरीबोर्ड या XIB में ऑब्जेक्ट्स के साथ कोड में गुणों को हुक करने के लिए अभी भी आवश्यक है

एक IBOutlet कनेक्शन आमतौर पर एक दृश्य या नियंत्रण और इसके प्रबंधन दृश्य नियंत्रक के बीच स्थापित होता है (यह अक्सर किसी IBActions के अलावा किया जाता है कि एक दृश्य नियंत्रक को एक प्रत्युत्तर द्वारा प्रदर्शन करने के लिए लक्षित किया जा सकता है)। हालांकि, एक IBOutlet का उपयोग शीर्ष-स्तरीय संपत्ति को उजागर करने के लिए भी किया जा सकता है, जैसे एक अन्य नियंत्रक या एक संपत्ति जिसे तब एक संदर्भ दृश्य नियंत्रक द्वारा एक्सेस किया जा सकता है।


1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.