ios – UIAlertController将无法显示 – 在Swift中

ios – UIAlertController将无法显示 – 在Swift中,第1张

概述我创建了一个ContactUsViewController. 在此控制器中,用户将从pickerView中选择一个选项,然后在textView中键入消息并按“发送电子邮件”按钮. 当他们按下按钮时,它会创建一个MFMailComposeViewController,以便他们可以发送电子邮件.现在,当电子邮件发送,保存,取消或失败时,MFMailComposeViewController会在我的应用 我创建了一个ContactUsVIEwController.

在此控制器中,用户将从pickerVIEw中选择一个选项,然后在textVIEw中键入消息并按“发送电子邮件”按钮.

当他们按下按钮时,它会创建一个MFMailComposeVIEwController,以便他们可以发送电子邮件.现在,当电子邮件发送,保存,取消或失败时,MFMailComposeVIEwController会在我的应用程序中关闭.我想要一个警报然后似乎给他们一个更新,关于刚刚发生的事情.我最初使用UIAlertVIEw设置了这个,并将此代码放在有趣的mailComposeController函数中,如下所示:

func mailComposeController(controller: MFMailComposeVIEwController,dIDFinishWithResult result: MFMailComposeResult,error: NSError?) {    switch result.rawValue {    case MFMailComposeResultCancelled.rawValue:        NSLog("Email cancelled")    case MFMailComposeResultSaved.rawValue:        NSLog("Email saved")        let sendMailErrorAlert = UIAlertVIEw(Title: "Email saved",message: "Your email has been saved in Mail.",delegate: self,cancelbuttonTitle: "OK")        sendMailErrorAlert.show()    case MFMailComposeResultSent.rawValue:        NSLog("Email sent")        let alertController = UIAlertController(Title: "test",message: "test",preferredStyle: .Alert)        let okbutton = UIAlertAction(Title: "Okay",style: .Default,handler: nil)        alertController.addAction(okbutton)        presentVIEwController(alertController,animated: true,completion: nil)    case MFMailComposeResultFailed.rawValue:        NSLog("Email Failed: %@",[error!.localizedDescription])        let sendMailErrorAlert = UIAlertVIEw(Title: "Oops!",message: "Looks like something went wrong,and the email @R_419_5717@n't send. Please try again later.",cancelbuttonTitle: "OK")        sendMailErrorAlert.show()    default:        break    }

如您所见,我使用了UIAlertVIEw保存的电子邮件和电子邮件失败.这非常好,并按预期显示我的警报.

我最近读到UIAlertVIEw从iOS 8开始就被折旧了,我们现在应该使用UIAlertController.因此,我尝试使用UIAlertController创建相同的东西,您可以在Email Sent部分看到它.但是,这似乎不起作用,它只是没有显示任何警报.它会将此错误打印到日志中:

Warning: Attempt to present <UIAlertController: 0x126c50d30> on <XXXX.ContactUsVIEwController: 0x1269cda70> whose vIEw is not in the window hIErarchy!

但我不确定这是说什么,或者更重要的是,如何解决它.

我的问题是:

>我说我不能使用UIAlertVIEw吗?
>我如何修复此问题并在从Mail应用程序返回后显示UIAlerController?

提前致谢.

解决方法 问题是,当您调用以下函数时:

present(alertController,completion: nil)

您的邮件视图控制器仍然可见.您必须确保alertController显示在窗口层次结构的顶部.在您的示例中,您具有以下窗口层次结构:

+---------------------------+| MailComposeVIEwController |+---------------------------+            ||+---------------------------+|  ContactUsVIEwController  |+---------------------------+

你应该做的是首先解雇电子邮件视图控制器.完成后,显示警报视图控制器.

let alertController = UIAlertController(Title: "test",preferredStyle: .Alert)let okbutton = UIAlertAction(Title: "Okay",handler: nil)alertController.addAction(okbutton)controller.dismissVIEwControllerAnimated(true){ () -> VoID in     self.present(alertController,completion: nil)   }

或者,您也可以在MailComposeVIEwController之上呈现alertController,如下所示:

let alertController = UIAlertController(Title: "test",handler: nil)alertController.addAction(okbutton)controller.present(alertController,completion: nil)
总结

以上是内存溢出为你收集整理的ios – UIAlertController将无法显示 – 在Swift中全部内容,希望文章能够帮你解决ios – UIAlertController将无法显示 – 在Swift中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存