2013-09-30 17 views
22

Poniższy kod działa poprawnie w systemie iOS 5/6. W iOS 7 wygląda to tak (czerwony owal dla podkreślenia).Pole odbiorcy pola MFMessageComposeViewController nie jest wyświetlane w systemie iOS 7

enter image description here

Kod:

if ([MFMessageComposeViewController canSendText]) { 
    self.messageComposer = [MFMessageComposeViewController new]; 
    self.messageComposer.recipients = @[number]; 
    self.messageComposer.messageComposeDelegate = self; 
    [self presentViewController:self.messageComposer 
         animated:YES 
        completion:nil]; 
} 

Pytanie: Jest to prosty kod. Czy ma to wpływ na inną zewnętrzną właściwość, być może kontrolera widoku prezentującego? Ktoś ma naprawę lub obejście?

dzięki.

Odpowiedz

20

Odkryłem, że pole odbiorcy MFMessageComposeViewController wydaje się częściowo pojawiać z serwera proxy UINavigationBar w systemie iOS7. Aby obejść ten problem, zrobiłem następujące w moich aplikacjach:

  1. Utwórz pusty zwyczaj UINavigationController podklasę, która nie zastępuje żadnej z metod UINavigationController użytkownika.
  2. Użyj tej zwyczaj UINavigationController podklasę jako marker jakichkolwiek kontrolerów nawigacji, że chcą mieć własny wygląd, poprzez ustawienie niestandardowej klasy na inspektora tożsamości w IB:

    enter image description here

  3. w moim app delegata , skonfigurować wygląd pasków nawigacyjnych takiego:

    [[UINavigationBar appearanceWhenContainedIn:[MyCustomNavigationController class], nil] ...]; 
    

Gwarantuje to, że dostanę navigati na wygląd paska chcę w kontrolerach, które chcę dostosować, ale zachowuje standardowy pasek nawigacyjny (i powiązany) wygląd w innych kontrolerach (np. MFMessageComposeViewController). Oto zrzut ekranu; Uwaga standardowego wyglądu MFMessageComposeViewController, z paskiem nawigacyjnym niestandardowy wygląd na popover w tle:

enter image description here

+0

To było łatwe. dzięki. Używam już podklasy dla 'UINavigationBar', więc zmieniłem ustawienia wyglądu, aby zastosować się tylko do tej klasy navbar 'ie. [Wygląd MyNavBar] ". To również rozwiązuje problem. – XJones

+0

Fantastyczna wersja i rozwiązanie - i naprawdę łatwe do wdrożenia! – daspianist

20

wychodził sam problem i tu jest moje Roztwór podstawowy

Przed przedstawieniem swoją wiadomość kompozytora ([self presentViewController:messageComposer animated:YES completion:nil];) ustawione

[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

w sposób delegata

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller 
       didFinishWithResult:(MessageComposeResult)result { 
    UIImage *backgroundImage = [UIImage imageNamed:@"Navigation Bar"]; 
    [[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

To wszystko !!

+13

To działa szybko i łatwo - wystarczy, że dodasz fragment kodu [UINavigationBar appearance] zanim zainicjujesz/przydzielisz MFMessageComposeViewController – Tys

+1

To musi być zaakceptowana odpowiedź. – Blios

Powiązane problemy