2017-02-10 5 views
0

MFMessageComposeViewController 및 MFMailComposeViewController를 사용하고 있습니다. 어떤 이유로 메일 VC 만 원하는 색상으로 스타일을 지정하고 있습니다. 다음은 didFinish 함수 내부의 AppDelegate에서 탐색 막대의 스타일을 지정하는 방법입니다.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는 다른 스타일인가 =? 여전히 기본 흰색 탐색 막대와 기본 파란색 취소 버튼이 나타납니다.

다음은 Email VC 및 Message VC 탐색 표시 줄의 사진입니다. enter image description here enter image description here

당신이 메시지 VC를 볼 수 있듯이 은 이메일 VC 이동 줄 같은 스타일되지 않는,하지만 난 이유를 모르겠어요.

+0

mfmessagecomposeviewcontroller에서 탐색 모음의 색상을 변경하는 방법 (iost 9에서 제시하는 방법) (http://stackoverflow.com/questions/33478646/how-to-change-color-of-navigation-bar- in-mfmessagecomposeviewcontroller-while-pr) – BJHStudios

+0

해당 페이지에서 내 문제에 대한 답변이없는 것 같습니다. 그들은 메일 컨트롤러를 변경하는 방법을 알아 냈지만 메시지 컨트롤러는 변경하지 않는 것 같습니다. – icekomo

답변

1

필요한 모든 속성을 설정하는 UINavigationBar (MyNavigationBar)의 하위 클래스를 만들 수 있습니다. UINavigationController에서 다음

, MFMessageComposeViewController 같은 상속, 당신은 초기화 방법

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

사용하고 매개 변수로 MyNavigationBar 클래스를 제공 할 수 있습니다.

+0

메일 VC가 AppDelegate에 의해 스타일이 지정되었지만 메일 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 ... 
    } 
} 

희망, 나와 같은 사람에게 유용합니다.

감사합니다.