2014-10-07 12 views
7

La mia implementazione standard per questo metodo delegato è la seguente. Ho appena inizializzato il pulsante di navigazione e salvato localmente il pulsante e il popover.Come sostituire il metodo deprecato splitViewController: willHideViewController: withBarButtonItem: forPopoverController:

- (void) splitViewController: (UISplitViewController *) splitController 
     willHideViewController: (UIViewController *)  viewController 
      withBarButtonItem: (UIBarButtonItem *)  barButtonItem 
     forPopoverController: (UIPopoverController *) popoverController 
{ 
    // Set the button to open the PopOver 
    barButtonItem.title = viewController.title; 
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; 

    // Save the ref to the default left navigation button 
    _masterButton = barButtonItem; 

    // Save the ref to the PopOver 
    _masterPopOver = popoverController; 
} 

Da iOS 8 questo metodo è deprecato e la documentazione di Apple dice:

Implementare la splitViewController: willChangeToDisplayMode: invece il metodo.

Ma gli argomenti del nuovo metodo non ha nulla a che fare con il metodo deprecato! Immagino di dover creare un pulsante e un popover anch'io?

Qualcuno ha già effettuato questa ricodifica per implementare il comportamento popup corrente?

Grazie per il vostro aiuto

+0

Hai trovato qualche risposta a questo problema? Stai cercando la stessa cosa! – lionserdar

+1

Non ancora. Credo che dovrò fare il lavoro da solo. Non è molto urgente per me, ma non appena avrò il lavoro, lo metto qui – PatrickV

risposta

11

Date un'occhiata a displayModeButtonItem. È molto simile a barButtonItem dal metodo deprecato.

È possibile refactoring tuo esempio in utilizzando il nuovo splitViewController: willChangeToDisplayMode: metodo nel modo seguente:

- (void)splitViewController:(UISplitViewController *)svc 
    willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode { 

    if (displayMode == UISplitViewControllerDisplayModePrimaryHidden) { 
     self.navigationItem.leftBarButtonItem = svc.displayModeButtonItem; 
    } 
} 
+1

Ma non c'è alcun 'leftBarButtonItem' definito. Come fare allora? –

+0

Grazie - Il codice è completo, copia e incolla nella tua vista di dettaglio. –

1

Si tratta di un'estensione per la risposta di Alessandro. Per coprire il commento di Cihad: l'ultima riga di codice crea il leftBarButtonItem e diventa il pulsante blu "<" che aprirà il viewController principale.

Ho appena commentato willHideViewController e willShowViewController dal mio viewController e ho incollato il codice di Alexander. Ha funzionato la prima volta.

Poi ho scoperto che se avessi avviato l'app in verticale, non funzionava finché non sono andato in verticale e sono tornato al ritratto. Ovviamente il metodo non viene chiamato fino a un cambio di orientamento.

così ho aggiunto questo codice nel mio metodo viewDidLoad della mia dettagli viewController e ha funzionato bene:

 //Set up the splitview controller 
    if (self.splitViewController.displayMode == UISplitViewControllerDisplayModePrimaryHidden) { 
     self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;} 

splitViewController è una proprietà dei vostri dettagli viewController che dovrebbe essere lì per voi da usare.

Problemi correlati