6

में बाल दृश्य नियंत्रक में स्पर्श ईवेंट का पता लगाने के लिए मैंने आईफोन के लिए मेनू की तरह साइडव्यू बनाया है जिसके लिए मैंने मूल दृश्य नियंत्रक में बाल दृश्य नियंत्रक जोड़ने के लिए कंटेनर शिप अवधारणा का उपयोग किया है। जब उपयोगकर्ता नेविगेशन बार पर मेनू बटन पर टैप करता है तो मैं सिर्फ एक विज़ुअल मेनू की तरह इसे एनिमेट करने के लिए बाल दृश्य नियंत्रक के फ्रेम को बदलता हूं ताकि बच्चे के दृश्य नियंत्रक को इसके आधे फ्रेम को दाईं ओर फिसल दिया जा सके।आईओएस

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

मैंने टैप इशारा किया है और इसे बाल दृश्य नियंत्रक सबव्यू के प्रत्येक बच्चे के दृश्य में जोड़ा है। तो किसी भी सबव्यू पर इशारा टैप करें टच इवेंट के बारे में अभिभावक व्यू कंट्रोलर को सूचित करेगा।

टच इवेंट बाल दृश्य नियंत्रक के मुख्य दृश्य के लिए ठीक काम करता है लेकिन किसी भी बटन पर किसी भी स्पर्श से टीएपी कार्यक्रम को मान्यता नहीं मिलती है।

मुझे नहीं पता कि मैं कहां गलत कर रहा हूं। कृपया मेरे बच्चे के दृश्य नियंत्रक में किसी भी स्पर्श के बारे में अभिभावक दृश्य नियंत्रक को सूचित करने में मेरी सहायता करें। अग्रिम में धन्यवाद।

+0

के लिए अपने माता पिता को देखने के नियंत्रक ऐड पर्यवेक्षक में आप drower के लिए एक ही खुला स्रोत पुस्तकालय का उपयोग कर सकते हैं? मैंने RESideMenu का उपयोग किया। इसमें कुछ रोचक प्रभाव पड़ता है और इसमें सभी टैप हैंडलिंग का निर्माण होता है। –

+0

नहीं, मेरे पास एक विकल्प था लेकिन मैं किसी तीसरे पक्ष के पुस्तकालयों का उपयोग नहीं करना चाहता हूं :) –

+0

बटन टैप ईवेंट रद्द कर देंगे ... आधा बंद होने पर थिर उपयोगिता अक्षम करें – amar

उत्तर

7

आप इस

ऐसा नहीं करना चाहिए "मैं का इस्तेमाल किया है टैप जेस्चर और को इसके बारे में हर बच्चे को देखने को शामिल किया है बच्चे दृश्य नियंत्रक subviews"

आप ऊपर एक ओवरले दृश्य जोड़ने के लिए क्या करना चाहिए मेनू खोलने के बाद parentviewcontroller के दृश्य का। तो यह बाएं और दाएं दृश्यों के शीर्ष पर रहेगा।

ओवरले दृश्य को नष्ट/छुपाने के लिए आपको उस पर टैप पहचानकर्ता जोड़ना चाहिए और मेनू को वहां एनीमेशन छुपाएं। नीचे दिए गए कोड

-(void)afterMenuOpened{ 

    UIViewController *parentViewController = yourParentViewController; 

    UIView *aOverLayView = [[UIView alloc]initWithFrame:parentViewController.view.bounds]; 

    aOverLayView.backgroundColor = [UIColor clearColor]; 

    UITapGestureRecognizer *tapRecog = [[UITapGestureRecognizer alloc] initWithTarget:parentViewController action:@selector(OverLayDidTap:)]; 

    tapRecog.numberOfTapsRequired = 1; 

    [aOverLayView addGestureRecognizer:tapRecog]; 

    [parentViewController.view addSubview:aOverLayView]; 


} 

- (void)OverLayDidTap:(UITapGestureRecognizer*)sender { 
// sender.view.hidden = YES; 
    NSLog(@"Hide Menu by resetting the menu frame"); 
} 
+0

बहुत बहुत धन्यवाद भाई !! यह काम कर रहा है :) –

+0

आपका स्वागत है :) –

1

मुझे लगता है कि आप अपने बटन की userInteractionEnabled संपत्ति को YES पर सेट करना भूल गए हैं जो उन्हें ईवेंट प्राप्त करने से रोक रहा है।

अन्य दृश्य नियंत्रक पर घटनाओं को पारित करने के लिए, एक प्रतिनिधि प्रोटोकॉल बनाने का एक बेहतर विचार है कि आपके बच्चे के दृश्य नियंत्रक संदेश को अपने मूल दृश्य नियंत्रक को वापस भेजने के लिए उपयोग कर सकते हैं।

+0

** userInteractionEnabled ** पहले से सेट है !! –

0

यदि आप सबव्यू में बटन के लिए स्पर्श ईवेंट खो रहे हैं, तो बटन के लिए लक्ष्य जोड़ने का प्रयास करें।

[button addTarget:<#(id)#> action:<#(SEL)#> forControlEvents:UIControlEventTouchUpInside]; 

childViewController में अपने चयनकर्ता समारोह से parentViewcontroller पोस्ट आप अधिसूचना को सूचित करने के।

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificaiton_name" object:object_you_want_to_send]; 

और NSNotificationCenter

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(method_you_want_to_call:) name:@"notificaiton_name" object:nil];