読者です 読者をやめる 読者になる 読者になる

pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

UIAppearanceを使ったときにMFMailComposeViewControllerのNavigationBarを変えたいときの方法

http://www.flickr.com/photos/20262161@N00/3010724109
photo by wicker_man


UIAppearanceを使うとMFMailComposeViewControllerのNavigationBarまでも設定されて、そこだけ変えたいときの対処方法です。


UIAppearanceを使って一括でNavigationBarの背景色や文字色を変えていると、MFMailComposeViewControllerまでも影響してしまい、MFMailComposeViewController生成時にNavigationBarの背景色や文字色を変えようとしてもいうことをききません。


それはMFMailComposeViewControllerがNavigationControllerを継承しており、その継承されているNavigationControllerの背景色や文字色を設定されているので変更できないのだと思います。


アプリでMFMailComposeViewControllerを使うときはデフォルトにしたいということはよくあるのかと思います。


例えばアプリではNavigationControllerを緑で統一しているけれど、新規メッセージの画面は以下のようにデフォルトのようにしたいことは考えるとよくあるのではと思います。


f:id:inagex:20140501105732p:plain


そこでstackoverflowをいくつかみたのですが、いろいろ試したもののなかなか変更されず。


http://stackoverflow.com/questions/15580405/override-uiappearance-property-for-mfmailcomposeviewcontroller


http://stackoverflow.com/questions/10107276/mfmessagecomposeviewcontroller-and-uiappearance-apple-says-dont-customize


結局はこちらの記事を参考にしました。


http://ameblo.jp/kendofujiwaradx/entry-11450886953.html


UINavigationControllerを継承したクラス例えば(CSNavigationController)を生成し、それに以下のようにNavigationBarの背景や文字色を適用する。

[[UINavigationBar appearanceWhenContainedIn:[CSNavigationController class], nil] setBarTintColor:[UIColor whiteColor]];
[[UINavigationBar appearanceWhenContainedIn:[CSNavigationController class], nil] setTintColor:[UIColor whiteColor]];


このようにすることでCSNavigationControllerを継承したものは上記の色になり、UINavigationBarを継承したMFMailComposeViewControllerは元々の変更されていない状態になりました。


これはMFMailComposeViewControllerは以下のように変更可能です。

[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];


なおNavigationBarの色の設定などはこちらを参考にしました。


Objective-C - iOS7でナビゲーションバーやステータスバーをカスタマイズする - QiitaObjective-C - iOS7でナビゲーションバーやステータスバーをカスタマイズする - Qiitaはてなブックマーク - Objective-C - iOS7でナビゲーションバーやステータスバーをカスタマイズする - Qiita


まだこのあたり知らない部分も多々あるので間違えていたらご指摘ください!