7

होम स्क्रीन से 3 डी टच शॉर्टकट का उपयोग करते समय मैं दृश्य दृश्य नियंत्रक को segue करने का प्रयास कर रहा हूं।कैसे प्रस्तुत करें UITabBarController और UINavigationBarController

एप्लिकेशन UITabBarController के भीतर एम्बेड किया गया है और प्रत्येक टैब रूट नियंत्रक UINavigationController है।

यहां बताया गया है कि मैंने प्रत्येक शॉर्टकट के लिए व्यू कंट्रोलर लोड करने के लिए शॉर्टकट को संभालने का प्रयास कैसे किया।

private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) { 

    if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) { 
    let sb = UIStoryboard(name: "main", bundle: nil) 

     let helloVC = sb.instantiateViewControllerWithIdentifier("HelloVC") as! HelloViewController 
     let goodbyeVC = sb.instantiateViewControllerWithIdentifier("GoodbyeVC") as! GoodbyeViewController 

     switch shortcutItemType { 
     case .Hello: 
      rootViewController.presentViewController(helloVC, animated: true, completion: nil) 
      break 
     case .Goodbye: 
      rootViewController.presentViewController(goodbyeVC, animated: true, completion: nil) 
      break 
     } 
    } 
} 
इस कोड के साथ शॉर्टकट केवल प्रारंभिक दृश्य नियंत्रक करने के लिए और नहीं helloVC और goodbyeVC नियंत्रकों जो अलग टैब में हैं करने के लिए आवेदन खोलने

मुझे लगता है कि यह ViewControllers है जिसे मैं लोड करने की कोशिश कर रहा हूं UINavigationController के साथ-साथ UITabBarController के भीतर एम्बेड किया गया है।

मैं presentViewController कैसे UITabBarController और UINavigationController के भीतर एम्बेड किया जा सकता हूं?

अद्यतन

मैं अनिश्चित हूं यदि निम्न काम करता है मैं एटीएम मेरे साथ एक iPhone 6S नहीं मिला है के रूप में। लेकिन मैंने कोड को निम्नलिखित में बदल दिया है, उम्मीद है कि यह 3 डी टच एक्शन होने पर चयनित टैब इंडेक्स लोड करेगा। वहां से इसे एक सेग्यू करने के लिए व्यू कंट्रोलर को अधिसूचना पोस्ट करनी चाहिए।

private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) { 

    if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) { 
     let tababarController = rootViewController as! UITabBarController 

     switch shortcutItemType { 
     case .Hello: 
      tababarController.selectedIndex = 1  
      NSNotificationCenter.defaultCenter().postNotificationName("performsegueHello", object: nil) 
      break 
     case .Goodbye: 
      tababarController.selectedIndex = 4 
      NSNotificationCenter.defaultCenter().postNotificationName("performsegueGoodbye", object: nil) 
      break 
     } 
    } 
} 
+0

आप जांच की है कि rootViewController.presentViewController (helloVC, एनिमेटेड: सच है, पूरा होने: शून्य) या rootViewController.presentViewController (goodbyeVC, एनिमेटेड: सच है, पूरा होने: शून्य) कहा जाता हो रही है? – beyowulf

+0

क्या आपने 'कोऑर्डिनेटर' पैटर्न के रूप में संदर्भित किया है? यह एक मोबाइल ऐप के भीतर नेविगेशन encapsulating का एक उपयोगी तरीका है। http://iamsim.me/the-coordinator-pattern/ –

उत्तर

1

कृपया निम्नलिखित कोड आज़माएं। मुझे लगता है कि आप टैब बार के नेविगेशन नियंत्रक तक नहीं पहुंच रहे हैं। आप इसे कर सकते हैं: अंदर एनवीसी = tvc?। SelectedViewController के रूप में? UINavigationController

अब, यहां आपका नेविगेशन नियंत्रक है जो आप उस पर कुछ भी प्रस्तुत या दबा सकते हैं।

private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) { 

let nvc = self.window?.rootViewController as? UINavigationController 
let tvc = nvc?.topViewController as? TabBarController 
let insideNvc = tvc?.selectedViewController as? UINavigationController 

if let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) { 
let sb = UIStoryboard(name: "main", bundle: nil) 

    let helloVC = sb.instantiateViewControllerWithIdentifier("HelloVC") as! HelloViewController 
    let goodbyeVC = sb.instantiateViewControllerWithIdentifier("GoodbyeVC") as! GoodbyeViewController 

    switch shortcutItemType { 
    case .Hello: 
     insideNvc?.presentViewController(helloVC, animated: true, completion: nil) 
     break 
    case .Goodbye: 
     insideNvc?.presentViewController(goodbyeVC, animated: true, completion: nil) 
     break 
    } 
} 

}

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