2016-08-17 7 views
1

MFMailComposerに問題があります。私は、Swift Codeの例を使って、iOSデベロッパーのためにこのガイドに従ってきました。スライドメニューのSwift Dismiss Mail Controller

私もこのサイトで次の同様の質問を見て撮影した:

swift - dismissing mail view controller from Sprite Kit

MFMailComposeViewController in Swift does not dismiss

リンクフレームワーク&ライブラリ:MessagesUI.framework

import MessageUI 

class FHCLLeftMenuViewController: FHBaseViewController,UITableViewDelegate,UITableViewDataSource,MFMailComposeViewControllerDelegate 

を私は、私のアプリの左のスライドメニューのサポートテキストをタップすると、メールアプリが来るp、私は電子メールを作成し、送信をクリックします。電子メールは受信トレイに表示されますが、コントローラはメールを送信してもそれ自体を却下しません。これはドラフトを削除しようとしたときにも発生し、アプリを終了して再起動する必要があります。

 case kFHCLMenuTagSupport: 
     //PT DashBoard 

     if !MFMailComposeViewController.canSendMail() { 
      print("Mail services are not available") 
      return 
     } 

     let composeVC = MFMailComposeViewController() 
     composeVC.mailComposeDelegate = self 

     // Configure the fields of the interface. 
     composeVC.setToRecipients(["[email protected]"]) 
     composeVC.setSubject("Client Support") 
     composeVC.setMessageBody("Some text here.", isHTML: false) 



     // Present the view controller modally. 
     self.presentViewController(composeVC, animated: true, completion: nil) 

     func mailComposeController(controller: MFMailComposeViewController, 
            didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
      // Check the result or perform other tasks. 

      // Dismiss the mail compose view controller. 
      self.dismissViewControllerAnimated(true, completion: nil) 

     } 
     break 

私も同じ結果とアプリのメインダッシュボードに戻すには、このバリエーションを試してみた:

 case kFHCLMenuTagSupport: 
     //PT DashBoard 
     let storyboard = UIStoryboard(name: "Client", bundle: nil) 

     // Create View Controllers 
     let mainPage:FHClientDashBoardViewController = storyboard.instantiateViewControllerWithIdentifier("FHClientDashBoardViewController") as! FHClientDashBoardViewController 
     let mainPageNav = UINavigationController(rootViewController: mainPage) 



     if !MFMailComposeViewController.canSendMail() { 
      print("Mail services are not available") 
      return 
     } 

     let composeVC = MFMailComposeViewController() 
     composeVC.mailComposeDelegate = self 

     // Configure the fields of the interface. 
     composeVC.setToRecipients(["[email protected]"]) 
     composeVC.setSubject("Client Support") 
     composeVC.setMessageBody("Some text here.", isHTML: false) 



     // Present the view controller modally. 
     self.presentViewController(composeVC, animated: true, completion: nil) 

     func mailComposeController(controller: MFMailComposeViewController, 
            didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
      // Check the result or perform other tasks. 

      // Dismiss the mail compose view controller. 
      // self.dismissViewControllerAnimated(true, completion: nil) 
      self.mm_drawerController.setCenterViewController(mainPageNav, withCloseAnimation: true, completion: nil) 
     } 

     break 

任意の助けが理解されるであろう。

+1

'MFMailComposeViewController'または' FHCLLeftMenuViewController'を終了しますか? – kabiroberai

答えて

0

dismissViewControllerAnimated(_:completion:)関数は、その関数を呼び出すView Controllerを閉じます。この場合、selfに電話しているので、FHCLLeftMenuViewControllerを無効にしようとします。これはMFMailComposeViewControllerの代わりにdismissViewControllerAnimated(_:completion:)を呼び出すことで簡単に修正できます。

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    // Check the result or perform other tasks. 

    // Dismiss the mail compose view controller. 
    controller.dismissViewControllerAnimated(true, completion: nil) 
} 
0

ポストからチップが動作しませんでしたが、それはで何かだった:

は、単に次のようにあなたの mailComposeController(controller:didFinishWithResult:error:)機能を置き換え、これを行うには(また、Appleの独自のドキュメントでこのように表示されます)メニューがどのように設定されたかのコード(推奨のためではありません)。いくつかの考えの後、私はうまくいった回避策を思いつきました。プログラムにはIMメッセージシステムとサポート用の電子メールシステムがあるので、次のようにしました。

1.)メニューの[サポート]ボタンを新しいビューコントローラ&ストーリーボードにリンクしました。

2)が1を介して接触のオプションを追加しました:1メッセンジャーやメールサポート

を何らかの理由でスライドメニューから直接解任しようとしていないとき、コンメールビューは、ビューコントローラから却下されました。最も洗練されたソリューションではなく、機能しました。

関連する問題