2016-08-24 50 views
1

我想在MFMailComposeViewController上关闭我的应用程序一段时间后的键盘,为此我在MFMailComposeViewController上添加了一个计时器和一个隐藏文本字段,一旦定时器触发我解雇键盘,这将成为苹果应用商店拒绝应用程序的问题吗?添加一个隐藏的UIITextField到MFMailComposeViewController

代码

import Foundation 
import UIKit 
import MessageUI 

class mailViewController : UIViewController , MFMailComposeViewControllerDelegate, UITextFieldDelegate { 

    @IBOutlet var tempTextField : UITextField? 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.view.backgroundColor = UIColor.lightGrayColor() 
     //var timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: "dismissKeyBoard", userInfo: nil, repeats: false) 



     let mailComposeViewController = configuredMailComposeViewController() 
     if MFMailComposeViewController.canSendMail() { 

      tempTextField = UITextField(frame: CGRectMake(0, 0, 400, 400)) 
      tempTextField!.delegate = self 
      tempTextField!.hidden = true 
      mailComposeViewController.view.addSubview(tempTextField!) 

      var timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: "goToHome", userInfo: nil, repeats: false) 

      self.presentViewController(mailComposeViewController, animated: true, completion: nil) 

     } else { 
      self.showSendMailErrorAlert() 
     } 

     let bounds = UIScreen.mainScreen().bounds 
     let width = bounds.size.width 
     let height = bounds.size.height 

     let rect = CGRect(x: 0, y: 0, width: width, height: height); 
     let testLayer = CustomView(frame: rect) 
     testLayer.backgroundColor = UIColor.clearColor() 
     //mailComposeViewController.view.addSubview(testLayer) 

     //UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
     //UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 
     //[firstResponder resignFirstResponder]; 

     var keyWindow = UIApplication.sharedApplication().keyWindow 
     //var firstResponder = keyWindow?.performSelector(firstResponder) 
     //firstResponder.re 

    } 

    @IBAction func sendEmailButtonTapped(sender: AnyObject) { 
     let mailComposeViewController = configuredMailComposeViewController() 
     if MFMailComposeViewController.canSendMail() { 
      self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
     } else { 
      self.showSendMailErrorAlert() 
     } 
    } 

    func configuredMailComposeViewController() -> MFMailComposeViewController { 
     let mailComposerVC = MFMailComposeViewController() 
     mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property 

     mailComposerVC.setToRecipients(["[email protected]"]) 
     mailComposerVC.setSubject("Sending you an in-app e-mail...") 
     mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false) 

     return mailComposerVC 
    } 

    func showSendMailErrorAlert() { 
     let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK") 
     sendMailErrorAlert.show() 
    } 

    // MARK: MFMailComposeViewControllerDelegate Method 
    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) { 
     controller.dismissViewControllerAnimated(true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     print("inside mail composer view") 
    } 

    func dismissKeyBoard(){ 
     print("dismiss the keyboard now ....") 
    } 

    override func viewDidDisappear(animated: Bool) { 
     print("view did disappear got called !!!!") 
    } 

    func goToHome(){ 

     print("timer ended") 
     //var goToHome = ViewController() 
     //self.presentViewController(goToHome, animated: true, completion: nil) 
     tempTextField?.becomeFirstResponder() 
     tempTextField?.resignFirstResponder() 
    } 
} 

回答

1

这可能是有问题的下面一行。因为它可能违反了Apple准则。

mailComposeViewController.view.addSubview(tempTextField!) 

您不能添加任何控制器或你不能任何子视图添加到 MFMailComposeViewController。

根据苹果指导原则,应用程序不应该中断用户进程/任务,直到用户允许或完成该进程。

+0

如果用户登录....并且在mailComposeViewController上很长时间保持理想状态,他会自动超时?并被重定向到登录屏幕? – Max

+0

在这种情况下,您可能需要为邮件功能找到备用方式。您可以通过自定义您的UI(如MFMailComposeViewController)来尝试使用WebServices。因为按照苹果的指导方针,它可能不允许这种方式.. !!! –