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 设置不同的标题,就像这样。

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

但是,此实现有效地依赖于 MFMailComposeViewController 的未记录功能。您正在访问私有类 (_MFMailComposeRootViewController) 的 navigationItem 并将其标题更改为邮件主题以外的内容。我赞同 Art Gillespie 的观点,你不应该这样做,而且很可能会因为这样做而被 Apple 评论家拒绝。此外,此过程可能会在 iPhone 操作系统的任何次要版本中完全改变,可能会导致用户崩溃,直到您可以发布更新以修复该行为。

不过,这取决于您,如果您仍想采取这些不推荐的步骤,那就是您的做法。

于 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

您应该能够只获取一个视图(controller.view)并将其放置在您的控制器中......在那一刻,您没有修改任何内容,实际上您在他们的 iPad 电子邮件应用程序中做的几乎与 Apple 一样撰写电子邮件......同样的事情也应该在 iPhone 上工作......

于 2010-10-29T14:45:40.707 回答
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 回答
0

最有可能的是,您必须深入视图层次结构以找到包含标题的原始 UINavigationBar,并在其上手动设置标题。

程序类转储在这里可能会派上用场,以确定所使用的确切类。试用、错误和调试器很可能是您最好的选择。

于 2009-11-20T07:26:35.520 回答