8

के दौरान मेनू बटन दबाएं मेरे पास मेरे टीवीओएस ऐप में एक UIViewController है जो केवल कुछ सेकंड के लिए दिखाई देगा, और पूरी तरह अनुकूलन योग्य मेनू बटन हैंडलिंग की आवश्यकता है। मैं यह इसलिए की तरह बनाने के लिए:टीवीओएस - पुश-व्यू-कंट्रोलर संक्रमण

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Add a tap gesture recognizer to handle MENU presses. 
    UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
    tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)]; 
    [self.view addGestureRecognizer:tapGestureRec]; 
} 

- (void)handleTap:(UITapGestureRecognizer *)sender 
{ 
    // Code to process the MENU button is here. 
} 

मैं pushViewController:animated: का उपयोग कर दृश्य नियंत्रक प्रदर्शित:

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; 
[self pushViewController:controller animated:isAnimated]; 

मैं पाया है कि उपयोगकर्ता के रूप में जल्द मेनू प्रेस अगर के रूप में स्क्रीन प्रकट करने के लिए शुरू होता है, जबकि पार -फेड संक्रमण प्रभाव अभी भी प्रदर्शित हो रहा है, वे UITapGestureRecognizer को चकमा देने और पिछली स्क्रीन पर वापस जाने में सक्षम हैं, जिसका इरादा नहीं है। वे मेन्यू को बार-बार मैश करके भी समस्याएं पैदा कर सकते हैं - अंततः वे उन चीज़ों से बच जाएंगे जिन्हें वे सक्षम नहीं कर सकते हैं।

मैं कैसे सुनिश्चित कर सकता हूं कि मेनू प्रेस हमेशा मेरे ओवरराइड तक पहुंच जाए? क्या ऐप-इनकिंग मेन्यू बटन हैंडलर निर्दिष्ट करने का कोई तरीका है और अभी भी एक UINavigationController का उपयोग करें?

उत्तर

3

मेरे लिए काम किया गया एक समाधान UITapGestureRecognizer को self.navigationController.view पर स्थापित करना था। नियमित UIViewControllers द्वारा याद किए जाने वाले किसी भी नल के बजाय नेविगेशन नियंत्रक के पहचानकर्ता द्वारा पकड़ा जाता है। यदि आप अपने द्वारा बनाए गए प्रत्येक व्यू कंट्रोलर पर UITapGestureRecognizers इंस्टॉल करते हैं, तो केवल नलियां जो नेविगेशन नियंत्रक को दरारों के माध्यम से गिरती हैं, वे अंतर होते हैं जो मध्य-संक्रमण होते हैं, और यह उन नलिकाओं को पूरी तरह से अनदेखा करना सुरक्षित है।

ध्यान दें कि जब आप मेन्यू को होम स्क्रीन पर वापस जाने के लिए चाहते हैं, तो आपको अस्थायी रूप से इस टैप पहचानकर्ता को हटाने की आवश्यकता होगी और टीवीओएस को टैप को अपने आप संभालने दें, क्योंकि मुझे होम स्क्रीन से बचने का कोई साफ तरीका नहीं मिल सका मेरे कोड में (exit(0) से कम)।

0

इस व्यवहार के कारण मुझे बहुत ही समस्या है। मेरे मामले में मेरे पास मेनू बटन के आधार पर कस्टम फोकस प्रबंधन है pressesEnded पर पता चला और preferredFocusedView द्वारा प्रबंधित किया गया। लेकिन जब नेविगेशन नियंत्रक इस समय ViewController और उपयोगकर्ता poping है मेनू बटन पर दूसरा क्लिक करें, फिर UINavigationController वर्ग pressesEnded का पता लगाने और उसके बाद अपने गंतव्य पर preferredFocusedView फोन ViewController जहाँ मेरे प्रबंधन लेकिन pressesEnded है बुलाया नहीं किया जाएगा, क्योंकि था UINavigationController द्वारा "चुरा" ।

class MenuPhysicalHackNavigationController: UINavigationController { 

    override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 

    } 

    override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 

    } 

    override func pressesCancelled(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 

    } 

    override func pressesChanged(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 

    } 

} 
: मेरे मामले में इस समस्या के लिए

समाधान "डमी" वर्ग है कि इस तरह UINavigationController द्वारा उपयोग किया जाएगा बनाने के लिए है

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