Изменить заголовок MFMailComposeViewController
Я использую 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];
}
6 ответов
Вы можете установить другой заголовок для вашего MFMailComposeViewController одной строкой, вот так.
...
[self presentModalViewController:controller animated:YES]; // Existing line
[[[[controller viewControllers] lastObject] navigationItem] setTitle:@"SomethingElse"];
...
Тем не менее, эта реализация эффективно опирается на недокументированные функции MFMailComposeViewController. Вы получаете доступ к навигационному элементу частного класса (_MFMailComposeRootViewController) и изменяете его заголовок на нечто, отличное от темы сообщения. Я повторяю мнение Арта Гиллеспи о том, что вы не должны этого делать, и, вероятно, рецензенты Apple будут отклонены за то, что сделали что-то подобное. Кроме того, этот процесс может полностью измениться в любой незначительной версии ОС iPhone, что может вызвать сбои для ваших пользователей, пока вы не сможете выпустить обновление для исправления поведения.
Однако решение остается за вами, и если вы все еще хотите предпринять эти нерекомендованные шаги, то именно так вы и поступите.
Из ссылки на класс MFMailComposeViewController:
Важное замечание: Интерфейс составления почты сам по себе не настраивается и не должен изменяться вашим приложением. Кроме того, после представления интерфейса вашему приложению не разрешается вносить дальнейшие изменения в содержимое электронной почты.
Похоже, что тема сообщения кормит заголовок MFMailComposeViewController в iOS 8.
Ответ 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
...
Вы должны иметь возможность просто взять представление (controller.view) и поместить его в свой контроллер... в этот момент вы ничего не изменяете и фактически делаете почти то же самое, что и Apple, в их почтовом приложении для iPad, когда составление письма... то же самое должно работать и на iPhone...
Скорее всего, вам придется покопаться в иерархии представлений, чтобы найти необработанный UINavigationBar, содержащий заголовок, и вручную установить заголовок для него.
Здесь может пригодиться программный дамп класса для определения точных используемых классов. Пробная версия, ошибка и отладчик, скорее всего, лучшая ставка для вас.