Change title of MFMailComposeViewController

半世苍凉 提交于 2019-11-28 23:28:34

You can set a different title for your MFMailComposeViewController with a single line, like so.

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

However, this implementation effectively relies on undocumented features of MFMailComposeViewController. You're accessing the navigationItem of a private class (_MFMailComposeRootViewController) and changing its title to something other than the mail subject. I echo Art Gillespie's sentiment in that you should not do this and are very likely to be rejected by the Apple reviewers for doing something like this. In addition, this process could change completely in any minor point release of the iPhone OS, possibly causing crashes for your users until you can release an update to fix the behavior.

The decision is up to you, though, and if you still want to take these unrecommended steps, that is how you do it.

From the MFMailComposeViewController Class Reference:

Important: The mail composition interface itself is not customizable and must not be modified by your application. In addition, after presenting the interface, your application is not allowed to make further changes to the email content.

It seems that the subject of the message feeds the title of MFMailComposeViewController in iOS 8.

You should be able to take just a view (controller.view) and place it inside of your controller ... in that moment, you are not modifying anything and you are actually doing almost the same thing like Apple in their iPad email app when composing an email ... same thing should work on iPhone too ...

Sbrocket's answer works great. This is how to add a title view (label):

// 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];

Same comments as above, it's not really recommended to customize MFMailComposeViewController...

Most likely, you would have to dig down in the view hierarchy to find the raw UINavigationBar that contains the title, and manually set the title on that.

The program class-dump may come in handy here for determining the exact classes used. Trial, error, and a debugger are most likely your best bet.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!