簡體   English   中英

如何在AppDelegate.swift中按常規順序調用ViewController

[英]How to call ViewControllers in regular sequence at AppDelegate.swift

現在我正在開發Messenger

MessengerBox是tableViewController,當用戶點擊其中一個單元格時,將顯示chatRoomViewcontroller。

如果應用未運行且消息已到達,則顯示推送通知。 然后用戶點擊通知,App將直接顯示chatRoomViewcontroller。

最初,我使用window.rootViewController實現了此代碼

但是問題發生了。 當我點擊chatRoomviewController的“后退按鈕”時,不會發生更改,因為此視圖控制器是rootview,並且它的presentingViewController為空!

所以我固定如下

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    ///some code for notification..

        let mVC  //this is MessengerBoxViewcontroller
        let crVC  //this is ChatRoomViewController


        CRVC?.sender = "asdf"
        do{
            self.window?.rootViewController = mVC
            self.window?.makeKeyAndVisible()
            defer{
                mVC?.presentChatRoomVC()
            }
        }

     /// some code...
}

有用! 但我想知道更好的方法。 而且我想我應該研究窗口和視圖控制器的工作方式。

請推薦給我更好的方法,並參考文件。 謝謝。

您需要在ChatRoomViewController以編程方式處理后退按鈕動作,以解決您的問題:

在后退按鈕上單擊:

  1. 檢查navigationController堆棧中是否存在MessengerBoxViewcontroller。

  2. 如果MessengerBoxViewcontroller在navigationController堆棧中,則彈出以返回到MessengerBoxViewcontroller

  3. 還有其他MessengerBoxViewcontroller

     if let viewControllers = self.navigationController?.viewControllers { for viewController in viewControllers { if viewController.isKindOfClass(MessengerBoxViewcontroller) { print("Your controller exist") navigationController?.popViewController(animated: true) } } } else { let vc = self.storyboard?.instantiateViewController(withIdentifier: "messengerBoxViewcontroller") as! MessengerBoxViewcontroller self.present(vc, animated: true, completion: nil) } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM