如何更改MFMessageComposeViewController的导航栏颜色?
问题描述:
我正在使用MFMessageComposeViewController和MFMailComposeViewController。出于某种原因,只有邮件VC正在使用我想要的颜色进行样式设计。下面是我在didFinish func里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风格不同?它仍然显示默认的白色导航栏和默认的蓝色取消按钮。
正如你可以看到消息VC不被风格化,如电子邮件VC导航栏,但我不知道为什么。
答
您可以创建UINavigationBar
(MyNavigationBar
)的子类,在其中设置所有必需的属性。从UINavigationController
然后,MFMessageComposeViewController
继承,你可以使用它的初始化方法
init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?)
,并提供MyNavigationBar
类作为参数。
答
以下是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 ...
}
}
希望,这对像我这样的人很有用。
问候。
[如何更改mfmessagecomposeviewcontroller中的导航栏的颜色,同时在ios 9中呈现它]的可能的副本(http://stackoverflow.com/questions/33478646/how-to-change-color-of-navigation-bar- in-mfmessagecomposeviewcontroller-while-pr) – BJHStudios
似乎没有关于我在该页上的问题的答案。他们似乎想出如何更改邮件控制器,但不是邮件控制器。 – icekomo