2011-05-25 10 views
5

में UIButton से UIViewController में एक विधि को कॉल करना अभी भी उद्देश्य सी के बारे में सीखना और संरचना को सही तरीके से प्राप्त करना।एक सबव्यू

मेरे पास एक UIViewController के साथ एक आईओएस ऐप है जिसमें "doSomething" नामक परिभाषित विधि है। मेरे व्यू कंट्रोलर में मेरे पास एक दृश्य है और उसमें कई UIButton हैं जिन्हें मैं प्रोग्रामेटिक रूप से बनाता हूं (नीचे एक बटन के साथ उदाहरण देखें)।

enter image description here

अब जब मैं बटन दबाएँ मैं अपने विधि "DoSomething" कॉल करना चाहते हैं। जिस तरह से मैं वर्तमान में यह कर इस तरह है:

[myButton addTarget:nil 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside]; 

मेरे लक्ष्य के बाद से नहीं के बराबर यह जब तक यह एक विधि "DoSomething" कहा जाता है पाता प्रत्युत्तर श्रृंखला ऊपर जाता है। यह काम करता है, लेकिन यह वास्तव में सही महसूस नहीं करता है।

मैंने @protocol का उपयोग करना शुरू कर दिया है लेकिन वास्तव में इसके आसपास मेरा सिर नहीं मिला है। मैं कुछ ट्यूटोरियल देख रहा हूं लेकिन मेरे लिए यह पर्याप्त स्पष्ट नहीं है। मैंने टेबल व्यू कंट्रोलर के लिए प्रोटोकॉल का उपयोग किया है, लेकिन एक को परिभाषित करना मेरे लिए नया है।

क्या इस विशिष्ट मामले के लिए एक उदाहरण प्राप्त करना संभव होगा?

धन्यवाद!

+0

क्या आप आईबी का उपयोग करते हैं? –

+0

यह सही क्यों नहीं लगता है? प्रतिक्रियाकर्ता श्रृंखला के लिए यह बनाया गया था, और यह करने के लिए बिल्कुल सही बात है। – leftspin

उत्तर

4

दृश्य नियंत्रक में आपका लक्ष्य पास के रूप में और उस ऑब्जेक्ट पर विधि को कॉल किया जाएगा।

संपादित करें:

[myButton addTarget:controller 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside]; 

मान लें कि आप एक चर बुलाया नियंत्रक अपने UIViewController है कि है। यदि आपके पास अपने नियंत्रक का संदर्भ नहीं है तो बस अपने दृश्य में एक को पास करें।

EDIT2:

देखें इंटरफ़ेस:

@property (assign) UIViewController* controller; 

देखें कार्यान्वयन:

@synthesize controller; 

नियंत्रक:

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    someView.controller = self; 
} 
+0

क्या आप कृपया विस्तृत कर सकते हैं? मुझे यकीन नहीं है कि मैं आपको समझता हूं। – Structurer

+0

संपादन skorulis के लिए धन्यवाद। अब हम करीब आ रहे हैं, लेकिन मुझे लगता है कि मैं अभी भी ऐसा करने के लिए पर्याप्त नहीं हूं। मुझे लगता है कि यह आपके लिए बहुत स्वाभाविक है, लेकिन मुझे नहीं पता कि मेरे UIViewController पर वापस कैसे संदर्भित किया जाए, जो मुझे लगता है कि यहां मूल है ... – Structurer

+0

संपादन 2 के लिए धन्यवाद! अब हम पूर्ण हैं ;-) मैंने परीक्षण किया है और यह घड़ी की तरह काम करता है और मैंने आज कुछ नया सीखा है। धन्यवाद! – Structurer

0

तरह से मैं यह कर था मान सेट हैकासे self

[myButton addTarget:self 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside] 

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

+0

धन्यवाद सीएस।मैंने पहले कोशिश की और मुझे लगता है कि यह UIView पर जाएगा, UIViewController नहीं। अगर मैं स्वयं में बदल जाता हूं तो मुझे एक "अज्ञात चयनकर्ता उदाहरण के लिए भेजा जाता है"। यही कारण है कि मैंने इसे शून्य में बदल दिया। – Structurer

+0

क्या आप अपना कोड पोस्ट कर सकते हैं, इसलिए मुझे आपके पास क्या परेशानी हो रही है इसका बेहतर विचार है? – csano

+0

हाय सीएस, मुझे लगता है कि स्कोरुलिस सही रास्ते पर है, बस इतना है कि मैं वास्तविक कोड जानने के लिए पर्याप्त स्मार्ट नहीं हूं ... – Structurer

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