17

UIAppearanceプロトコルを使用して、アプリ全体でUINavigationBarオブジェクトの背景画像を設定しています。

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"image-name"] forBarMetrics:UIBarMetricsDefault];

MFMailComposeViewControllerのインスタンスでこれをオーバーライドして、デフォルトのスタイルのナビゲーションバーが表示されるようにします。これを設定するためにappearanceWhenContainedInを使用しようとしましたが、これはiOS 5では機能しますが、iOS6では機能しません

[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

私は間違いを犯していますか、それともこれを達成するためのより良い方法がありますか?

4

3 に答える 3

24

通常の方法でMFMailComposerの外観を変更することはできませんが、これまで何度も使用した回避策がいくつかあります。

新しい外観を実装するクラスに2つのメソッドを追加します。

- (void)applyComposerInterfaceAppearance
{
    [[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
}

- (void)applyGlobalInterfaceAppearance
{
    // My default color of choice
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
}

次に、showメソッドで、必要な特別なコンポーザーインターフェイスの変更を適用します。

- (void)showMailComposer
{
    if ([MFMailComposeViewController canSendMail]) 
    {
        [self applyComposerInterfaceApperance];

        MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init];
        viewController.mailComposeDelegate = delegate;
        [viewController setToRecipients:mailRecepients];
        [viewController setSubject:mailSubject];
        [viewController setMessageBody:messageBody isHTML:NO];
        [self presentModalViewController:viewController animated:YES];
    }
}

そして、デリゲートで、インターフェースを元の状態に戻します。

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    // Do normal mail composer did finish stuff in here
    [self applyGlobalInterfaceAppearance];
}
于 2013-03-22T22:15:29.510 に答える
2

Mail Composerビューは、iOS 6では別のプロセスで実行され、直接改ざんすることはできません(ビューは基本的に別のアプリ内にあるため)。表示内容をカスタマイズすることはできません。TwitterとFacebookのビューでも同じです。

リモートビューコントローラーの詳細については、次のとおりです。http: //oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

于 2013-03-22T21:53:47.137 に答える
1

MFMailComposeViewControllerインスタンスにtintColorを設定するだけです。

[mailInstance.navigationBar setTintColor:[UIColor someColor]];
于 2014-09-11T18:16:26.867 に答える