[英]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
以編程方式處理后退按鈕動作,以解決您的問題:
在后退按鈕上單擊:
檢查navigationController堆棧中是否存在MessengerBoxViewcontroller。
如果MessengerBoxViewcontroller
在navigationController堆棧中,則彈出以返回到MessengerBoxViewcontroller
。
還有其他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.