2016-08-24 46 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。因爲按照蘋果的指導方針,它可能不允許這種方式.. !!! –