2010-09-22 11 views
11

से माता-पिता/सुपर विधि को कॉल करना उम्मीद है कि कोई इस पर मेरी सहायता कर सकता है क्योंकि घंटों तक अटक गया है।आईफोन: एक सबव्यू

मैं एक प्रकार की तस्वीर पुस्तिका बनाने की कोशिश कर रहा हूं। मेरे पास एक दृश्य है जो मेरा कंटेनर है और मैं addubview का उपयोग कर उसमें सबव्यू जोड़ता हूं।

सबव्यू पर, मेरे पास जेश्चर इत्यादि हैं जो मैं मूल दृश्य में विधि को ट्रिगर करना चाहता हूं। मैंने प्रतिनिधि को ट्रिगर करने का तरीका बताया लेकिन मैं मूल दृश्य को ट्रिगर करने के लिए प्रतिनिधि नहीं मिला। मैंने इसे करने के 10 अलग-अलग तरीकों को पढ़ा है और कोई काम नहीं है।

अब मैं बहुत उलझन में हूं कि एक सुपर व्यू क्या है। बस मामलों भ्रमित करने के लिए, प्रतिनिधि एक tabcontroller है और माता पिता के दृश्य टैब बटन 1

मैंने कोशिश की

[self.view.superview method] 
[self.superview method] 

प्रतिनिधि को मैं self.tabcontroller.parentviewcontroller, selectedview की कोशिश की, सुपर view.super

है

अद्यतन: सबव्यू को मूल दृश्य के रूप में एक पुन: प्रयोज्य दृश्य के रूप में स्वतंत्र होने की आवश्यकता है। इसके अलावा मैंने पेरेंटव्यू को पर्यवेक्षण में सेट नहीं किया है क्योंकि मैंने सोचा था कि पर्यवेक्षण सबव्यू के साथ एक दृश्य है (कृपया मुझे मत मारो)। तो शायद मुझे सिर्फ पर्यवेक्षक को पेरेंटव्यू सेट करने की आवश्यकता है?

+0

आपका प्रतिनिधि वस्तु क्या है? क्या यह 'UIViewController' है? – kubi

+0

इसका उप-वर्गीकृत UIViewController – Burf2000

उत्तर

23

इस तरह के काम करने के उचित तरीके से प्रोटोकॉल और प्रतिनिधि पैटर्न का उपयोग करने के लिए है ।

तरह

@protocol subViewDelegate 
    -(void)somethingHappened:(id)sender; 
@end 

एक प्रोटोकॉल को परिभाषित करें तो अपने superview में है कि प्रोटोकॉल लागू:

@interface superView:UIViewController<subViewDelegate> { 
... 
} 
... 
@end 

इस

@interface subView : UIView { 
    id<subViewDelegate> delegate; 
    ... 
} 
@propery (nonatomic, assign) id<subViewDelegate> delegate; 
... 
@end 
अपने subview में

की तरह अपने subview में एक प्रतिनिधि संपत्ति को परिभाषित , इस

जैसे प्रतिनिधि को कॉल करें
[self.delegate somethingHappened :self]; 
+0

ये दृश्य हैं नियंत्रक विचार नहीं करते हैं। इसके अलावा सबव्यू सुपर दृश्य से स्वतंत्र हो सकता है। E.g इसका उपयोग अन्य सभी जगह – Burf2000

+0

समान सिद्धांत दोनों पर लागू होता है। मैंने माना कि आपके पास एक दृश्य नियंत्रक है जो एक दृश्य और इसके सबव्यू प्रबंधित करता है। – VdesmedT

+0

नहीं, प्रत्येक के पास इसका एक दृश्य नियंत्रक है। तो एक अलग वर्ग – Burf2000

3

यह दिया किसी भी कोड के बिना आप मदद, लेकिन कोशिश करते हैं करने के लिए एक छोटे से मुश्किल है:

  1. एक प्रोटोकॉल बनाएँ: लेकिन आप (मैं इसे "MyProtocol" कॉल करेंगे) की तरह यह नाम है और यह परिभाषा में जोड़ने के लिए जिस फ़ंक्शन को आप अपने पर्यवेक्षण में कॉल करना चाहते हैं, चलो इसे "answerToSwipe"
  2. यदि आपका पर्यवेक्षण एक UIView है, तो आपको UIView का अपना उप-वर्ग बनाना होगा और अपना पर्यवेक्षण उस वर्ग का एक उदाहरण बनाना होगा।
  3. अपने (नव) बनाया superview वर्ग 1. के प्रोटोकॉल लागू) एक "respondToSwipe" विधि
  4. अपने subview में प्रकार id का एक उदाहरण चर बनाएं लागू है, और यह नाम जैसे आप चाहें, उदा "MyDelegate"।
  5. अपने "myDelegate" करने के लिए 2/3 में बनाया superview दर्रा।) अलग-अलग
  6. कॉल [myDelegate respondToSwipe] जब भी चाहें
-1

क्या आपके मूल दृश्य ने सबव्यूव को जोड़ा जब सबव्यूव के पर्यवेक्षण के रूप में सेट किया गया था?अन्यथा सबव्यूव नहीं जानता कि इसका पर्यवेक्षण कौन है।

विधि हैंडलर को पर्यवेक्षक के बजाय प्रतिनिधि हैंडलर को कॉल करने के लिए नामकरण करने का अधिक मानक तरीका, इसे एक संपत्ति बनाते हैं, और प्रतिनिधि के अस्तित्व के दोनों के लिए सबव्यू चेक जांचते हैं और क्या यह विधि को संभाल सकता है।

+0

मैंने पर्यवेक्षण में कुछ भी सेट नहीं किया है, मैंने इसे माना सुपर था क्योंकि मैंने इसे देखा – Burf2000

+0

"सुपर" पर्यवेक्षण के समान नहीं है। तो आपकी धारणा कई कारणों से गलत है (जो एक अलग सवाल है)। – hotpaw2

+0

मैं एक दृश्य में एक सबव्यू जोड़ता हूं, फिर मैं अभिभावक दृश्य विधियों को कॉल करना चाहता हूं? कोई विचार? – Burf2000

0

एक कस्टम दृश्य के लिए, आप UIControl उपवर्ग और नियंत्रण घटनाओं इस्तेमाल कर सकते हैं:

  • कुछ नियंत्रण की घटनाओं को परिभाषित करें। आप को बनाने के लिए स्वतंत्र हैं 4 नियंत्रण घटनाओं (UIControlEventApplicationReserved = 0x0F000000)
  • Have जो कोई भी घटनाओं फोन addTarget प्राप्त करना चाहता है: कार्रवाई: forControlEvents:
  • नियंत्रण कॉल है [self sendActionsForControlEvents:events]

वैकल्पिक रूप से, आप एक UIGestureRecognizer इस्तेमाल कर सकते हैं स्टाइल इंटरफ़ेस (AddTarget: action :)।

वैकल्पिक रूप से सिर्फ UIGestureRecognizer (ओएस 3.2+)

-1

यहाँ कैसे iPhone पर प्रतिनिधिमंडल प्रतिमान को लागू करने का एक बहुत अच्छा उदाहरण का उपयोग करें। मैंने कोड डाउनलोड किया है जो यह बहुत अच्छा काम करता है।

http://www.hivestudio.cat/index.php?option=com_content&view=article&id=57:technical-note-the-delegation-pattern-on-the-iphone&catid=35:technical-note-category&Itemid=76

+2

लिंक अब और अधिक सुलभ नहीं है। – NightFury

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