Поле получателей MFMessageComposeViewController не отображается в iOS 7
Код ниже отлично работает в iOS 5/6. В iOS 7 это выглядит так (красный овал для акцента).
![enter image description here]()
код:
if ([MFMessageComposeViewController canSendText]) {
self.messageComposer = [MFMessageComposeViewController new];
self.messageComposer.recipients = @[number];
self.messageComposer.messageComposeDelegate = self;
[self presentViewController:self.messageComposer
animated:YES
completion:nil];
}
Вопрос. Это простой код. Есть ли какое-то другое внешнее свойство, возможно, представляющего контроллер представлений, что влияет на это? У кого-нибудь есть исправление или обход?
спасибо.
Ответы
Ответ 1
Я обнаружил, что поле получателя MFMessageComposeViewController, по-видимому, принимает некоторые из его вид из прокси-сервера UINavigationBar в iOS7. Чтобы обойти это, я сделал следующее в своих приложениях:
- Создайте пустой пользовательский подкласс UINavigationController, который не переопределяет ни один из методов UINavigationController.
-
Используйте этот пользовательский подкласс UINavigationController в качестве маркера для любых контроллеров навигации, которые я хочу иметь пользовательский внешний вид, установив пользовательский класс в инспекторе идентификации в IB:
![enter image description here]()
-
В моем делегате приложения настройте внешний вид навигационных панелей следующим образом:
[[UINavigationBar appearanceWhenContainedIn:[MyCustomNavigationController class], nil] ...];
Это гарантирует, что я получу внешний вид панели навигации в контроллерах, которые я хочу настроить, но сохраняет стандартную навигационную панель (и связанную) внешность в других контроллерах (например, MFMessageComposeViewController). Вот скриншот; обратите внимание на стандартный внешний вид MFMessageComposeViewController, с появлением пользовательской панели навигации в popover в фоновом режиме:
![enter image description here]()
Ответ 2
У меня была такая же проблема, и вот мое решение -
Перед представлением композитора сообщений ([self presentViewController:messageComposer animated:YES completion:nil];
)
set
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
и в методе делегата
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result {
UIImage *backgroundImage = [UIImage imageNamed:@"Navigation Bar"];
[[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
[self dismissViewControllerAnimated:YES completion:nil];
}
Вот и все!