2017-01-03 3 views
0

die Schaltfläche Senden und Abbrechen auf etwas anderes als weiß auf einem weißen Hintergrund fest Manchmal erscheinen die Schaltflächen Senden und Abbrechen weiß, so dass sie auf dem weißen Hintergrund auf dem MFMailComposeViewController fast unsichtbar sind. Die Instanz von MFMailComposeViewController wird erstellt, nachdem eine UITextView mit dataDetectorTypes .link drücken, so konnte ich nicht sofort die Instanz zugreifen, bevor in der viewDidLoad Funktion unten:Legen Sie in 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 
    } 
} 

Wie kann ich die Standardfarben auf den Tasten auf dem MFMailComposeViewController eingestellt und vermeiden Sie, die Navigationsleisten im Rest der App durcheinander zu bringen?

Wie es jetzt ist, wird die barTintColor nicht beim ersten Mal gesetzt. Aber beim zweiten Mal ist es auf blackColor eingestellt, ich denke, von der viewWillDisappear Aufruf von der vorherigen Instanz.

+0

Didi Sie versuchen, es in 'UINavigationController' (das ist bereits formatiert, wie Sie benötigen) vor der Präsentation? Auch wenn Sie in Ihrer App einen anderen 'UINavigationController' verwenden, können Sie einen anderen nur für' MFMailSomposeViewController' erstellen. – NSDmitry

Antwort

0

Was habe ich den Delegaten Einstellung und dann wird die URL Interaktion von der Textview zu fangen war Setzen Sie tintColor auf die Navigationsleiste auf die 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

Zuerst .. verwenden Sie nicht UINavigationBar.appearance(). BarTintColor = UIColor.blackColor()

Wenn Sie ein Storyboard mit einem UINavigationController haben es mit dem der Farbton auf Ihre UINavigationBar.

Es gibt nur eine navigationbar für jeden UINavigationController

Sie können Ihre Farbe mit diesem hässlichen Aussehen Werkzeug für alle Fälle nicht umgehen. Einige Controller (MailComposer, PhotoRoll, ...) verwenden schwarze BarButtons, einige sind weiß getönt.

Wenn Sie Aussehen verwenden ... sind alle Balken (nur neu erstellt Bars, nicht die, die im Speicher) bewirkt

+0

Ich habe die Verwendung der Erweiterung des MFMailComposeViewController verworfen. Und hookt die .Link-Interaktion manuell auf eine Weise, die ich eine Instanz des mailComposeVC zu konfigurieren hatte. – user12345625

Verwandte Themen