2013-09-30 11 views
22

Il codice seguente funziona correttamente in iOS 5/6. In iOS 7, sembra questo (ovale rosso per enfasi).Il campo Destinatari di MFMessageComposeViewController non viene visualizzato in iOS 7

enter image description here

Codice:

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

Domanda: Questo è semplice codice. C'è qualche altra proprietà esterna, forse del controller di visualizzazione che presenta, che sta influenzando questo? Qualcuno ha una soluzione o una soluzione?

grazie.

risposta

20

Ho trovato che il campo del destinatario MFMessageComposeViewController sembra prendere un po 'del suo aspetto dal proxy di apparenza UINavigationBar in iOS7. Per ovviare a questo, ho fatto quanto segue in mie applicazioni:

  1. Creare una sottoclasse UINavigationController personalizzato vuoto, che non esclude nessuno dei metodi di UINavigationController.
  2. Utilizzare questa UINavigationController personalizzato sottoclasse come marker per qualsiasi controller di navigazione che vogliono avere l'aspetto personalizzato, impostando la classe personalizzata nella finestra di ispezione identità IB:

    enter image description here

  3. Nella mia app delegato , impostare l'aspetto delle barre di navigazione come questa:

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

questo assicura che ottengo i navigati sull'aspetto barra che voglio nei controller che voglio personalizzare, ma conserva la barra di navigazione standard (e relativa) in altri controller (come MFMessageComposeViewController). Ecco uno screenshot; nota la comparsa standard MFMessageComposeViewController, con la comparsa barra di navigazione personalizzato sul popover in sottofondo:

enter image description here

+0

È stato facile. Grazie. Sto già usando una sottoclasse per "UINavigationBar", quindi ho cambiato le mie impostazioni di aspetto per applicarmi solo a questa classe di navigazione "i.e. [Aspetto MyNavBar] '. Anche questo risolve il problema. – XJones

+0

Straordinarie soluzioni e soluzioni - e davvero facili da implementare! – daspianist

20

Ho affrontato lo stesso problema, e qui è la mia soluzione-

Prima di presentare il messaggio compositore ([self presentViewController:messageComposer animated:YES completion:nil];) set

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

e nel metodo delegato

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

Questo è tutto !!

+13

Questo funziona come un rapido e facile aggiramento: assicurati di aggiungere lo snippet di codice [aspetto UINavigationBar] prima di iniziare/allocare MFMessageComposeViewController – Tys

+1

Questa deve essere la risposta accettata. – Blios

Problemi correlati