Как подтолкнуть MFMailComposeViewController? (iOS 5)

Из табличного представления я хочу представить MFMailComposeViewController. Я не хочу использовать метод presentModalViewController:animated:, а вместо этого нажимаю контроллер представления, чтобы он соответствовал другим анимациям из этого табличного представления.

Поскольку MFMailComposeViewController является UINavigationController и нажатие на контроллер навигации не поддерживается, я использовал:

[[self navigationController] pushViewController:[mailComposer topViewController] animated:YES];

Это работает, но когда я нажимаю кнопку «Отмена», появляется предупреждение:

Представляем лист действий, обрезанный по его супервизору. Некоторые элементы управления могут не реагировать на прикосновения. На iPhone попробуйте - [UIActionSheet showFromTabBar:] или - [UIActionSheet showFromToolbar:] вместо - [UIActionSheet showInView:].

Кнопка «Отмена» в нижней части таблицы UIActionSheet не реагирует на прикосновения. Кто-нибудь знает, можно ли протолкнуть MFMailComposeViewController?


person Marco    schedule 28.11.2011    source источник
comment
Вы уже ответили на свой вопрос - MFMailComposeViewController является UINavigationController, и нажатие на контроллер навигации не поддерживается   -  person beryllium    schedule 28.11.2011
comment
Но вы можете нажать UIViewController MFMailComposeViewController. Или это не поддерживается?   -  person Marco    schedule 28.11.2011
comment
Ваш код подталкивает UIViewController (topViewController возвращает его). Это нормальное поведение.   -  person beryllium    schedule 28.11.2011
comment
Да, я знаю, но недостатком является предупреждение UIActionSheet при использовании кнопки отмены MailComposer. Так что это не кажется поддерживаемым, или мне не хватает шага (например, указание этому контроллеру представления использовать [self navigationController] как его navigationController).   -  person Marco    schedule 28.11.2011
comment
Я думаю, что этот UIActionSheet, вызываемый из навигации, который содержит MailComposer, и этот лист действий не может найти (или сделать) что-то, потому что у вас есть только часть иерархии навигации (отсутствует navigationBar или toolBar).   -  person beryllium    schedule 28.11.2011


Ответы (1)


Представление MFMailComposeViewController как модального представления соответствует HIG от Apple. Помещать его в стек навигации - нет. Используйте -presentModalViewController:animated: (или -presentViewController:animated:completion: при запуске на iOS 5 или выше)

person gschandler    schedule 28.11.2011
comment
Спасибо за Ваш ответ. Хорошо, значит, нет возможности анимировать MailComposer справа налево? Кажется немного странным, что эта анимация не поддерживается. Я не думаю, что пользователю понятно, почему функция «Отправить электронное письмо» анимируется сверху, а все другие функции из этого табличного представления анимируются с нажатием справа налево. - person Marco; 28.11.2011
comment
Вы также можете использовать UIModalTransitionStyleFlipHorizontal. В противном случае переход справа налево предназначен для указания того, что пользователь углубляется в информационную иерархию. Представление составителя почты должно быть перерывом в действии и должно быть модальным действием. Захват иерархии контроллера представления из автономного UINavigationController компонента - это получение неисправного приложения в будущем, если Apple изменит свое поведение или структуру. - person gschandler; 28.11.2011
comment
На будущее, presentModalViewController:animated: устарел Apple, поэтому вам следует использовать presentViewController:animated:completion:. - person ; 24.09.2012