2017-02-10 8 views
0

Я использую MFMessageComposeViewController и MFMailComposeViewController. По какой-то причине только Mail VC разрабатывается с цветами, которые я хочу. Вот как я настраиваю панель навигации в AppDelegate внутри функции didFinish.Как изменить цвет панели навигации для MFMessageComposeViewController?

let navigationBarAppearace = UINavigationBar.appearance() 
    navigationBarAppearace.tintColor = Styles.whiteColor() 
    navigationBarAppearace.barTintColor = Styles.inputColor() 
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:Styles.whiteColor()] 
    navigationBarAppearace.isTranslucent = false 

Но сообщение VC не используется в AppDelegate, но я не уверен, почему бы и нет. Я пробовал это, но ничего не изменилось. контроллер ЛПЭ = MFMessageComposeViewController()

 controller.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: Styles.positiveColor()] 
     controller.navigationBar.barTintColor = Styles.negativeColor() 
     controller.messageComposeDelegate = self 

ли сообщение VC стиль по-разному? Он по-прежнему отображается с белой навигационной панелью по умолчанию и кнопкой «синий отменить» по умолчанию.

Вот фотография сообщений VC и навигационных панелей сообщений VC. enter image description here enter image description here

Как вы можете увидеть сообщение VC не будучи в стиле как Email VC панели навигации, но я не знаю, почему.

+0

Возможный дубликат [Как изменить цвет навигационной панели в mfmessagecomposeviewcontroller, представляя его в ios 9] (http://stackoverflow.com/questions/33478646/how-to-change-color-of-navigation-bar- in-mfmessagecomposeviewcontroller-while-pr) – BJHStudios

+0

На моей странице, похоже, нет ответа о моей проблеме. Кажется, они выясняют, как изменить контроллер Mail, но не контроллер сообщений. – icekomo

ответ

1

Вы можете создать подкласс UINavigationBar (MyNavigationBar), где вы установите все необходимые свойства.

Тогда как MFMessageComposeViewController унаследован от UINavigationController, вы можете использовать его метод инициализации

init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) 

и обеспечивают MyNavigationBar класс в качестве параметра.

+0

Почему Mail VC оформляется в AppDelegate, но не Mail VC? – icekomo

+0

Просьба уточнить ваш вопрос. Я не понял. – DisableR

+0

Почему панель навигации для MFMailComposeViewController принимает набор стилей в файле AppDelegate, но MFMessageComposeViewController не принимает одинаковый стиль. – icekomo

0

следующее предназначено для Swift 3/4.

Я пробовал много способов показать на StackOverflow и других сайтах, включая способ подкласса, упомянутый в приведенном выше ответе. Но не удалось добиться успеха в изменении цвета или изменении цвета шрифта UIBarButtons.

Затем попробовал другой способ представления MFMessageComposeViewController.

// Configures and returns a MFMessageComposeViewController instance. This is same with no change. 
func configuredMessageComposeViewController() -> MFMessageComposeViewController { 
    let messageComposeVC = MFMessageComposeViewController() 

    let fileManager:FileManager = FileManager.default 
    messageComposeVC.messageComposeDelegate = self // Make sure to set this property to self, so that the controller can be dismissed! 
    messageComposeVC.recipients = [myContactPhone] 

    if fileManager.fileExists(atPath: mySendImagePath) { 
     if let image = UIImage(contentsOfFile: mySendImagePath) { 
      if UIImagePNGRepresentation(image) != nil 
      { 
       let imageData1: Data = UIImagePNGRepresentation(image)! 
       let success = messageComposeVC.addAttachmentData(imageData1, typeIdentifier: "public.data", filename: "image.JPG") 

       if(success) 
       { 
       } 
       else{ 
       } 
      } 
     } 
    } 
    return messageComposeVC 
} 

// Following code is usage of above. 
    if (MFMessageComposeViewController.canSendText()) { 
     myMessageComposeVC = configuredMessageComposeViewController() 

     // old code - Instead of using following way 
     //present(messageComposeVC, animated: true, completion: nil) 

     // Used this way to use existing navigation bar. 
     if let messageComposeVC = myMessageComposeVC { 
      messageComposeVC.willMove(toParentViewController: self) 
      messageComposeVC.view.frame = self.view.frame 
      self.view.addSubview(messageComposeVC.view) 
      self.addChildViewController(messageComposeVC) 
      messageComposeVC.didMove(toParentViewController: self) 
     } 
    } else { 
     showSendMMSErrorAlert() 
     return 
    } 

// Following code to remove it when returned through delegate. 
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { 

    // old code 
    //controller.dismiss(animated: true, completion: nil) 

    controller.willMove(toParentViewController: nil) 
    controller.view.removeFromSuperview() 
    controller.removeFromParentViewController() 

    if(result.rawValue == 0) 
    { 
     ... error ... 
    } else { 
     ... success ... 
    } 
} 

Надеюсь, это полезно для таких людей, как я.

С уважением.

Смежные вопросы