2015-06-02 4 views
32

का उपयोग करके ऐप प्रतिनिधि से ओपनिंग व्यू कंट्रोलर मैं पुश नोटिफिकेशन बनाने की कोशिश कर रहा हूं जो निर्धारित करता है कि पुश से प्राप्त जानकारी के अनुसार कौन सा दृश्य खोलना है।स्विफ्ट

मैं धक्का से जानकारी प्राप्त करने में कामयाब रहे, लेकिन मैं अब मैं वर्तमान में निम्नलिखित है अन्य ढेर अतिप्रवाह सवाल को देखते हुए

खोलने के लिए दृश्य प्राप्त करने के लिए संघर्ष कर रहा हूँ:

अनुप्रयोग प्रतिनिधि क्या खत्म लोड हो रहा है:

 //Extract the notification data 
    if let notificationPayload = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 
     // Get which page to open 
     let viewload = notificationPayload["view"] as? NSString 
     let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
     //Load correct view 
     if viewload == "circles" { 

      var viewController = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier("Circles") as! UIViewController 
      self.window?.rootViewController = viewController 

         } 
    } 

वर्तमान में यह var ViewController = self ... line पर विफल रहा है।

+0

चेक [इस] (http://stackoverflow.com/a/36158926/1223728) जवाब – Borzh

+1

मैं इस कोशिश की और यह जहाँ तक उद्घाटन "मंडलियां" के रूप में देखने के नियंत्रक काम करता है । लेकिन कहें "मंडल" दृश्य नियंत्रक अपने ऐप के नेविगेशन पेड़ के उप पेड़ के भीतर ही है। मैं कैसे सुनिश्चित कर सकता हूं कि एक बार जब मैं अपना सर्कल "मंडल" दृश्य नियंत्रक में खोलूं, तो सभी पिछली नौसेनाएं काम करती हैं? अभी, यह बैक नेविगेशन दिखाए बिना "मंडल" दृश्य नियंत्रक खोलता है। – Dogahe

उत्तर

65

आपको नीचे छवि के रूप में ViewController StoryBoardId प्रॉपर्टी सेट करना होगा।

enter image description here

खुला ViewController का उपयोग कर तेजी से

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Circles") as UIViewController 
     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = initialViewControlleripad 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
+0

बिल्कुल वही जो मुझे चाहिए, धन्यवाद। – Lister

+0

लेकिन यह नियंत्रक का एक नया उदाहरण बना रहा है। मैं नियंत्रक चाहता हूं कि पहले से ही राज्य हो। या क्या मैं कुछ न कुछ भूल रहा हूं? – rjcarr

+0

@rjcarr आप राज्य की जांच करना चाहते हैं और कौन सा नियंत्रक लोड करना चाहते हैं .. –

4

पहले प्रारंभ window

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
let storyBoard = UIStoryboard(name: "Main", bundle: nil) 

में नीचे के रूप में कोडिंग AppDelegate कक्षा के अंदर rootViewController स्थापित करने के लिए

let viewController = storyBoard.instantiateViewControllerWithIdentifier("Circles") as UIViewController 
self.window?.rootViewController = viewController 
self.window?.makeKeyAndVisible() 
3

मैं कहूंगा कि जब भी आप रूटव्यू कंट्रोलर को बदलना चाहते हैं तो UIWindow बनाना बुरा विचार है। रूटवीसी (ऊपरी समाधान का उपयोग करके) के कुछ बदलावों के बाद आपके पास एक ही समय में आपके ऐप में कई UIWindows होंगे।

मेरी राय में बेहतर समाधान है:

  1. जाओ नई rootVC: UIScreen की सीमा से नए rootVC के लिए let rootVC = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewControllerWithIdentifier("newRootVCIdentifier") as UIViewController
  2. सेट फ्रेम: rootVC.view.frame = UIScreen.mainScreen().bounds
  3. वर्तमान विंडो (एनीमेशन के साथ यहाँ) के लिए नया रूट नियंत्रक सेट करें : UIView.transitionWithView(self.window!, duration: 0.5, options: .TransitionCrossDissolve, animations: { self.window!.rootViewController = rootVC }, completion: nil)

हो गया!

आपको विधि window?.makeKeyAndVisible() की आवश्यकता नहीं है, क्योंकि यह समाधान वर्तमान ऐप विंडो पर काम करता है।

18

स्विफ्ट 3:

यह मेरा पसंदीदा दृष्टिकोण जब AppDelegate के माध्यम से वर्तमान ViewController से एक नया ViewController पेश है।इस तरह से आप की जरूरत नहीं है पूरी तरह से आपके विचार पदानुक्रम नीचे आंसू जब एक पुश सूचना या सार्वभौमिक लिंक

if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "someController") as? SomeController { 
    if let window = self.window, let rootViewController = window.rootViewController { 
     var currentController = rootViewController 
     while let presentedController = currentController.presentedViewController { 
      currentController = presentedController 
     } 
     currentController.present(controller, animated: true, completion: nil) 
    } 
} 
+0

यह सबसे अच्छा तरीका है, आप इस दृश्य को भी self.dismiss (एनिमेटेड: सत्य, समापन: शून्य) – Imtee

+0

@Imtee: प्रस्तुत दृश्य को खारिज करें नियंत्रक का मतलब है? –

+0

@ लोहिथकोरुपोलू, यदि आप वर्तमान दृश्य नियंत्रक से आगे बढ़ना चाहते हैं। – Imtee

4

स्विफ्ट 3

निपटने नेविगेशन नियंत्रक के साथ एक साथ दृश्य पेश करने के लिए:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let viewController = storyboard.instantiateViewController(withIdentifier :"InboxViewController") as! InboxViewController 
let navController = UINavigationController.init(rootViewController: viewController) 

    if let window = self.window, let rootViewController = window.rootViewController { 
     var currentController = rootViewController 
     while let presentedController = currentController.presentedViewController { 
      currentController = presentedController 
     } 
      currentController.present(navController, animated: true, completion: nil) 
    } 
1

स्विफ्ट 3 SWRevealViewController

self.window = UIWindow(frame: UIScreen.main.bounds) 
    let storyBoard = UIStoryboard(name: "Main", bundle: nil) 

    let viewController = storyBoard.instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController 
    self.window?.rootViewController = viewController 
    self.window?.makeKeyAndVisible() 
1

स्विफ्ट में 3

 let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: StorybordName, bundle: nil) 
     let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: identifierName) as UIViewController 
     if let navigationController = self.window?.rootViewController as? UINavigationController 
     { 
      navigationController.pushViewController(initialViewControlleripad, animated: animation) 
     } 
     else 
     { 
      print("Navigation Controller not Found") 
     } 
1
let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    let destinationViewController = storyboard.instantiateViewController(withIdentifier: "LandVC") as! LandingPageVC 

    destinationViewController.webpageURL = NotificationAdvertisement._htmlpackagePath 
    destinationViewController.adID = NotificationAdvertisement._adID 
    destinationViewController.toneID = NotificationAdvertisement.toneID 

    let navigationController = self.window?.rootViewController as! UIViewController 

    navigationController.showDetailViewController(destinationViewController, sender: Any?.self) 
+0

यह यूआईटीएबीबार में भी काम करेगा –