2013-09-22 6 views
15

तो मेरे पास आईओएस 7 ऐप के लिए मेरे निर्मित में नेविगेशन नियंत्रक है। शीर्षक दृश्य दृश्यमान है, साथ ही साथ बैक बटन और नेविगेशन बार स्वयं भी है। किसी कारण से, इंटरैक्टिव पॉप इशारा (बाएं किनारे से स्वाइप) काम नहीं कर रहा है। कुछ नहीं हुआ। जब मैं इशारा लॉग करता हूं, तो यह शून्य नहीं होता है। क्या इस कार्यक्षमता को सक्षम करने के लिए मुझे कुछ खास करना है? क्या काम नहीं कर सकता है?UINavigationController इंटरएक्टिव पॉप इशारा काम नहीं कर रहा है?

उत्तर

25

एह, लगता है कि मैं सिर्फ इशारा प्रतिनिधि की स्थापना की और निम्नलिखित को लागू करने के लिए किया था:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 

} 
+0

Ive इस जाँच की लेकिन बहुत डरावने समस्या जब मैं इस तय कर दी है तो उपयोगकर्ता आधे रास्ते स्लाइड अगर और फिर वापस आओ मैं अगले नियंत्रक को पिछले दृश्य नियंत्रक पर ओवरलैप देखता हूं। मैं पिछला दृश्य नियंत्रक देखता हूं और अगला ओवरलैप पारदर्शी ग्लास की तरह पारदर्शी है।तो उपयोगकर्ता इस राज्य को बंद कर दिया जाता है। कोई उपाय। यह कुछ ऐसा दिखाई देता है जो प्रकट होता है/समस्या को संभालने में दिखाई देगा। –

12

आप viewDidLoad विधि में इस लाइन डाल सकते हैं।

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self; 
+0

मेरे लिए काम किया .. धन्यवाद – Simmy

15

इस response और टिप्पणियों को देखें। आपको बस इतना करना है nil करने के लिए अपने नेविगेशन नियंत्रक के इंटरैक्टिव पॉप इशारा पहचानकर्ता के प्रतिनिधि सेट है:

self.navigationController.interactivePopGestureRecognizer.delegate = nil; 

id<UIGestureRecognizerDelegate> करने के लिए एक casted आत्म करने के लिए यह निर्धारित करना भी काम करता है क्योंकि प्रोटोकॉल में सभी तरीकों वैकल्पिक हैं, लेकिन मैं प्रतिनिधि स्थापित करने लगता है इस मामले में nil अधिक उपयुक्त है।

+1

मुझे देखने में केवल सफलता मिली थी जब डीडएपियर – jonbauer

+6

यह "काम करता है" लेकिन जल्द ही ऐप को फ्रीज करने के बिंदु पर बहुत अजीब मुद्दों का कारण बनता है (आईओएस 8, डिवाइस के साथ परीक्षण) – Ixx

5

अधिक बाहर काम किया जवाब दोनों हारून और lojals

पहले अनुकूलित नेविगेशन नियंत्रक था और फिर वर्ग

viewDidLoad में इस कोड डाल इस लाइन डाल:

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self; 

और में कक्षा इस समारोह को लिखें

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES;} 
18

मुझे वें मिला है कस्टम बैक बटन का उपयोग करते समय, इंटरैक्टिव पॉप इशारा काम करना बंद कर देता है (मेरा लेना यह है कि ऐप्पल यह नहीं देख सकता कि आपका कस्टम बैक बटन कैसा व्यवहार करेगा, इसलिए वे इशारा को अक्षम करते हैं)।

इसे ठीक करने के लिए, जैसा कि पहले उल्लेख किया गया है, आप interactivePopGestureRecognizer.delegate संपत्ति nil पर सेट कर सकते हैं।

स्विफ्ट में, यह आसानी से इस तरह UINavigationController के लिए एक एक्सटेंशन जोड़कर अपने पूरे आवेदन भर में किया जा सकता है:

extension UINavigationController { 

    override public func viewDidLoad() { 
     super.viewDidLoad() 
     interactivePopGestureRecognizer?.delegate = nil 
    } 

} 

अपडेट किया गया जवाब

nil कारणों के लिए प्रतिनिधि की स्थापना की तरह लगता है कुछ परिदृश्यों में फ्रीज करने के लिए ऐप यूआई (उदाहरण के लिए जब उपयोगकर्ता नेविगेशन स्टैक के शीर्ष दृश्य नियंत्रक पर बाएं या दाएं स्वाइप करता है)।

क्योंकि gestureRecognizerShouldBegin प्रतिनिधि विधि एक विस्तार में संभाला नहीं जा सकता, उपवर्गीकरण UINavigationController सबसे अच्छा समाधान की तरह लगता है:,

class NavigationController: UINavigationController, UIGestureRecognizerDelegate { 

    /// Custom back buttons disable the interactive pop animation 
    /// To enable it back we set the recognizer to `self` 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     interactivePopGestureRecognizer?.delegate = self 
    } 

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 
     return viewControllers.count > 1 
    } 

} 
+3

यह काम करता है, लेकिन यह पता चला है कि कुछ परिस्थितियों में यह ऐप को जमा करता है। मुझे लगता है कि यह तब होता है जब इंटरैक्टिव पॉप इशारा ट्रिगर होता है जबकि दृश्य नियंत्रक को धक्का दिया जा रहा है। 'UINavigationController' subclass करने के लिए एक सुरक्षित तरीका होगा। उपclass में 'interactivePopGestureRecognizer.delegate' को स्वयं पर सेट करें और इंटरैक्टिव पॉप इशारा को पहचानने से रोकने के लिए एक नया व्यू कंट्रोलर धक्का दिया जाता है। – joern

+0

दरअसल, मुझे यह समस्या भी मिली है, नेविगेशन नियंत्रक स्टैक के केवल शीर्ष दृश्य नियंत्रक को प्रभावित करता है। मैंने उप-वर्गीकरण में आधारित एक अलग समाधान के साथ अपना जवाब अपडेट किया है। –

+0

@Eneko Alonso सही! जैसा कि आपने कहा था, अगर उपयोगकर्ता बाएं या दाएं स्वाइप करता है और फिर बटन को टैप करता है - पुश व्यू कंट्रोलर ग्लिच किया जाता है। Subclassing समस्या को हल करता है 100% – Alex

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