现在我正在开发使者
MessengerBox是tableViewController,当用户点击其中一个单元格时,会显示chatRoomViewcontroller。
如果应用未运行且消息已到达,则会显示推送通知。用户点击通知,App直接显示chatRoomViewcontroller。
最初,我使用window.rootViewController
实现了这段代码但问题发生了。当我点击chatRoomviewController的Back Button时,没有发生更改,因为这个视图控制器是rootview,它的presentViewController是空的!
所以我把它修好如下
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...
}
有效!但我想知道更好的方法。 此外,我认为我应该研究窗口和视图控制器如何工作。
请推荐我更好的方法和参考文件。 谢谢。
答案 0 :(得分:0)
您需要在ChatRoomViewController
中以编程方式处理后退按钮操作以解决您的问题:
开启后退按钮点击:
检查导航控制器堆栈中是否存在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)
}