在此控制器中,用户将从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中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)