14

アプリのアプリ内メールにMFMailComposeViewControllerを使用していますが、タイトルを変更できません。デフォルトではタイトルに件名が表示されていますが、タイトルを別のものに設定したいと思います。どうやってやるの?

私はもう試した:

controller.title = @"Feedback";

しかし、それは機能しませんでした。

これが私のコードです:

- (IBAction)email {
    NSArray *array = [[NSArray alloc] initWithObjects:@"myemail@gmail.com", nil];
    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    [[controller navigationBar] setTintColor:[UIColor colorWithRed:0.36 green:0.09 blue:0.39 alpha:1.00]];
    controller.mailComposeDelegate = self;
    controller.title = @"Feedback";
    [controller setSubject:@"Long subject"];
    [controller setMessageBody:@""
                        isHTML:NO];
    [controller setToRecipients:array];
    [self presentModalViewController:controller animated:YES];
    [controller release];
    [array release];
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    [self becomeFirstResponder];
    [self dismissModalViewControllerAnimated:YES];
}
4

6 に答える 6

21

MFMailComposeViewController の別のタイトルを 1 行で設定できます。

...
[self presentModalViewController:controller animated:YES]; // Existing line
[[[[controller viewControllers] lastObject] navigationItem] setTitle:@"SomethingElse"];
...

ただし、この実装は、MFMailComposeViewController の文書化されていない機能に効果的に依存しています。プライベート クラス (_MFMailComposeRootViewController) の navigationItem にアクセスし、そのタイトルをメールの件名以外に変更しています。私は Art Gillespie の意見に同意します。これを行うべきではなく、このようなことを行うと Apple のレビュアーに拒否される可能性が非常に高いということです。さらに、このプロセスは、iPhone OS のマイナー ポイント リリースで完全に変更される可能性があり、動作を修正するアップデートをリリースできるまで、ユーザーにクラッシュが発生する可能性があります。

ただし、決定はあなた次第です。それでもこれらの推奨されない手順を実行したい場合は、それがあなたのやり方です.

于 2009-11-23T20:01:53.097 に答える
14

MFMailComposeViewController クラス リファレンスから:

重要: メール作成インターフェース自体はカスタマイズできないため、アプリケーションで変更しないでください。さらに、インターフェイスを表示した後、アプリケーションは電子メールの内容をさらに変更することはできません。

于 2009-11-15T16:20:27.053 に答える
3

メッセージの件名は、iOS 8 で MFMailComposeViewController のタイトルをフィードするようです。

于 2015-06-22T16:25:07.500 に答える
2

Sbrocketの答えはうまくいきます。タイトル ビュー (ラベル) を追加する方法は次のとおりです。

// existing
[self presentModalViewController:controller animated:YES];

// new code
CGRect frame = CGRectMake(0, 0, 320, 44);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont fontWithName:@"MarkerFelt-Thin" size:18.0];
label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 12.0;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor darkGrayColor];
label.text = @"Your Comments";
[[[[controller viewControllers] lastObject] navigationItem] setTitleView:label];

上記と同じコメントですが、カスタマイズすることはあまりお勧めできませんMFMailComposeViewController...

于 2012-06-17T08:52:05.513 に答える
2

ビュー (controller.view) だけを取得してコントローラー内に配置できるはずです...その時点では、何も変更していません。実際には、iPad のメール アプリで Apple とほぼ同じことを行っています。メールの作成 ... 同じことが iPhone でも動作するはずです ...

于 2010-10-29T14:45:40.707 に答える
0

ほとんどの場合、ビュー階層を掘り下げて、タイトルを含む生の UINavigationBar を見つけ、手動でタイトルを設定する必要があります。

プログラム class-dump は、使用されている正確なクラスを特定するのに役立ちます。試行錯誤し、デバッガーを使用することが最善の策です。

于 2009-11-20T07:26:35.520 に答える