gpt4 book ai didi

ios - 如何在 AppDelegate.swift 中按常规顺序调用 ViewControllers

转载 作者:行者123 更新时间:2023-11-28 07:53:59 24 4
gpt4 key购买 nike

现在我正在开发Messenger

MessengerBox 是 tableViewController,当用户点击其中一个单元格时,就会显示 chatRoomViewcontroller。

如果应用程序未运行且消息到达,则会显示推送通知。用户点击通知,App 直接显示 chatRoomViewcontroller。

最初,我使用 window.rootViewController 实现了这段代码

但是问题发生了。当我点击 chatRoomviewController 的后退按钮时,更改没有发生,因为这个 View Controller 是 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...
}

有效!但我想知道更好的方法。而且我认为我应该研究窗口和 View Controller 的工作原理。

请推荐我更好的方法,并引用文档。谢谢。

最佳答案

您需要在 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)
    }

关于ios - 如何在 AppDelegate.swift 中按常规顺序调用 ViewControllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com