Подтвердить что ты не робот

Поле получателей 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];
}

Вопрос. Это простой код. Есть ли какое-то другое внешнее свойство, возможно, представляющего контроллер представлений, что влияет на это? У кого-нибудь есть исправление или обход?

спасибо.

4b9b3361

Ответ 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];
}

Вот и все!