2017-01-03 7 views
0

の白い背景に白色以外の何かに時々送信をキャンセルボタンとボタンをキャンセル白く見えるので、彼らはMFMailComposeViewController上の白い背景にはほとんど見えません。は送信を設定し、MFMailComposeViewController

私はMFMailComposeViewControllerのボタンにデフォルトの色を設定するにはどうすればよい
extension MFMailComposeViewController { 
    override public func viewWillAppear(animated: Bool) {   
     super.viewWillAppear(animated) 
     UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 
    } 

    override public func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 
     UINavigationBar.appearance().barTintColor = UIColor.blackColor() 
    } 

    override public func viewDidLoad() { 
     UINavigationBar.appearance().barTintColor = UIColor.redColor() 
     navigationBar.barTintColor = UIColor.blueColor() 
     super.viewDidLoad() 
     navigationBar.translucent = false 
     navigationBar.opaque = false 
    } 
} 

を:MFMailComposeViewControllerのインスタンスはので、私はすぐに以下を参照のviewDidLoad機能に前のインスタンスにアクセスすることができませんでしたdataDetectorTypes .LinkとUITextViewを押した後に作成されます残りのアプリではナビゲーションバーを台無しにしないでください。

今はbarTintColorが最初に設定されていませんが、その周りの2回目はblackColorに設定されています。以前のインスタンスからのviewWillDisappear呼び出しから推測します。まず

+0

Didiあなたはそれを提示する前に 'UINavigationController'(それは既に必要なスタイルになっています)に入れようとしていますか?あなたのアプリで別の 'UINavigationController'を使用しても、' MFMailSomposeViewController'のためだけに別のものを作成することができます。 – NSDmitry

答えて

0

とtintColorをナビゲーションバーにdefaultTintColorに設定します。

extension ContactViewController: UITextViewDelegate { 
    func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { 
     if URL.absoluteString.containsString("mailto:") { 
      let mailVC = MFMailComposeViewController() 
      let emailString = URL.absoluteString.stringByReplacingOccurrencesOfString("mailto:", withString: "") 
      mailVC.setToRecipients([emailString]) 
      mailVC.mailComposeDelegate = self 
      let defaultTintColor = UIColor(red: 0.0, green: 122/255, blue: 1.0, alpha: 1) 
      mailVC.navigationBar.tintColor = defaultTintColor 
      mailVC.navigationBar.translucent = false 
      mailVC.navigationBar.opaque = false 
      self.presentViewController(mailVC, animated: true, completion: nil) 
      return false 
     } 
     else if URL.absoluteString.containsString("tel") { 
      if let url = NSURL(string: URL.absoluteString) where UIApplication.sharedApplication().canOpenURL(url) { 
       return true //let the system handle with a telprompt 
      } 
     } 
     return false 
    } 
} 

extension ContactViewController: MFMailComposeViewControllerDelegate { 
    func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError?) { 
     switch result.rawValue { 
     case MFMailComposeResultCancelled.rawValue: 
      print("Mail cancelled") 
     case MFMailComposeResultSaved.rawValue: 
      print("Mail saved") 
     case MFMailComposeResultSent.rawValue: 
      print("Mail sent") 
     case MFMailComposeResultFailed.rawValue: 
      if let error = error { 
       print("Mail sent failure: %@", [error.localizedDescription]) 
      } 
     default: 
      break 
     } 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 
1

は... UINavigationBar.appearanceを(使用しない)。barTintColor = UIColor.blackColor()

あなたのUINavigationBarにそこ色合いの色をUINavigationControllerとストーリーボードを設定している場合。

各UINavigationController

1つだけnavigationBarは、あなたはすべてのケースのためにその醜い外観のツールを使って色を扱うことができない存在です。いくつかのコントローラ(MailComposer、PhotoRoll、...)は、黒色のBarButtonを使用していますが、一部は白で塗りつぶしています。その後、私はTextViewのからURLの相互作用をキャッチするために、デリゲートを設定するたんでしたあなたは、外観を使用している場合...すべてのバーが行われる

(唯一の新しい作成のバーではなく、メモリ内のもの)

+0

私はMFMailComposeViewControllerの拡張機能の使用を破棄しました。私はmailComposeVCのインスタンスを設定する方法で.Linkの対話を手作りにしました。 – user12345625

関連する問題