关闭视图控制器意外行为
Posted
技术标签:
【中文标题】关闭视图控制器意外行为【英文标题】:Dismiss View Controller unexpected behaviour 【发布时间】:2017-02-02 05:48:10 【问题描述】:我遇到了关于 Present 和 Dismiss ViewController 的奇怪问题。
例如:-
我在 ViewController A 然后我推到 B
所以在导航控制器堆栈中我们有 [A,B]
现在如果我在 B 上显示任何视图控制器(如 MFMailComposeViewController)
然后在发送邮件或删除草稿后,它会关闭 MFMailComposeViewController 并重定向到 A 而不是 B。
我对此进行了研究,但找不到任何替代方案。
【问题讨论】:
能否展示MFMailComposeViewControllerDelegate
的didFinishWithResult
方法?
分享您如何添加/删除(推送/弹出/呈现/关闭)NavigationController、A、B 和 MFMailComposeViewController 的代码。
【参考方案1】:
如果你在 ViewControllerB 的 MFMailComposeViewControllerDelegate 的 didFinishWithResult 方法中调用了 Popviewcontroller 方法,那么它是可能的。 而是避免在 didFinishWithResult 方法调用中调用 PopViewController 方法。
【讨论】:
【参考方案2】:希望这会有所帮助。在 A -> B 之间切换时使用它。
```let storyboard = UIStoryboard(name: "Main", bundle: nil)
desiredViewController = storyboard.instantiateViewController(withIdentifier: "desiredViewController")
UIApplication.shared.delegate?.window??.rootViewController? = 想要的视图控制器```
【讨论】:
【参考方案3】:试试这个从 B 展示 MFMailComposeViewController
self.navigationController?.present(MFMailComposeViewController, animated: true, completion: nil)
你可能用过
self.present(MFMailComposeViewController, animated: true, completion: nil)
希望对你有帮助
【讨论】:
【参考方案4】:您好,您可以这样做,当您在发送邮件或删除草稿后关闭时,它会关闭 MFMailComposeViewController,之后您可以检查 ViewController_Identifier 是否为“A_Screen”,然后避免或转义它。否则,如果它是“B-Screen”,则导航到该视图控制器。
根据需要使用此逻辑进行导航。
let targetView: String! = self.restorationIdentifier
if targetView == "A_Screen"
//Do nothing
else
let B_View = self.storyboard?.instantiateViewController(withIdentifier: "B_Screen") as! BViewController
self.navigationController?.pushViewController(B_View, animated: true)
确保您已为 ViewControllers 设置了 identifierID。
希望对你有所帮助。
【讨论】:
以上是关于关闭视图控制器意外行为的主要内容,如果未能解决你的问题,请参考以下文章