gpt4 book ai didi

ios - 关闭 MFMailComposeViewController 时如何防止 navigationController 返回根目录

转载 作者:行者123 更新时间:2023-12-01 22:36:30 25 4
gpt4 key购买 nike

当我关闭从导航堆栈中的第三个 viewController 以模态方式呈现的 MFMailComposeViewController 或 MFMessageComposeViewController 实例时,导航堆栈将被重置,并重新加载根 VC。如何防止这种行为并保留在原始呈现的 viewController(堆栈中的第三个 VC)上?无论我从呈现的 VC、呈现的 VC 还是导航 Controller 中调用解雇,我都会得到相同的行为。

这个问题以前有人问过,但我还没有看到解决方案。

应用程序结构如下所示:

TabBarController
Tab 1 - TripsNavController
-> Trips IntroductionVC (root VC) segue to:
-> TripsTableViewController segue to:
-> TripEditorContainerVC
- TripEditorVC (child of ContainerVC)
- HelpVC (child of ContainerVC)
Tab 2...
Tab 3...
Tab 4...

在 TripEditorVC 中,我展示了 MFMailComposeViewController。以下函数在采用 MFMailComposeViewControllerDelegate 协议(protocol)的 UIViewController 扩展中声明

func shareWithEmail(message: NSAttributedString) {

guard MFMailComposeViewController.canSendMail() else {
showServiceError(message: "Email Services are not available")
return
}

let composeVC = MFMailComposeViewController()
composeVC.setSubject("My Trip Plan")
composeVC.setMessageBody(getHTMLforAttributedString(attrStr: message), isHTML: true)
composeVC.mailComposeDelegate = self

present(composeVC, animated: true, completion: nil)

}

然后在委托(delegate)方法中我关闭 MFMailComposeVC:

public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

switch result {
case .sent:
print("Mail sent")
case .saved:
print("Mail saved")
case .cancelled:
print("Mail cancelled")
case .failed:
print("Send mail failed")
}

if error != nil {

showServiceError(message: "Error: \(error!.localizedDescription)")
}

dismiss(animated: true, completion: nil)
}

我尝试了以下方法来呈现和消除并获得相同的行为,即:TripsNavController 清除导航堆栈并重新加载 TripsIntroductionVC 作为其根 VC:

self.present(composeVC, animated: true, completion: nil)
self.parent?.present(composeVC, animated: true, completion: nil)
self.parent?.navigationController?.present(composeVC, animated: true, completion: nil)
self.navigationController?.present(composeVC, animated: true, completion: nil)

最佳答案

您还可以检查 presentingViewController?.dismiss 方法来获取解决方案。

我尝试过以下导航堆栈。

Navigation Stack

我仅使用您的代码就可以从 Container VC 的“发送电子邮件”按钮成功发送电子邮件。

您能检查并验证导航流程吗?

如果您仍然遇到任何问题,请告诉我。

关于ios - 关闭 MFMailComposeViewController 时如何防止 navigationController 返回根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596542/

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