2015-04-06 15 views
5

Nel mio progetto, stavo usando del codice per gestire il pulsante Indietro come segue.navigationController.viewControllers Funziona in modo diverso in iOS 8.2

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 
if ([[VCs objectAtIndex:[VCs count] - 2] isKindOfClass:[LoginViewController class]]) 
{ 
    [VCs removeObjectAtIndex:[VCs count] - 2]; 
    [VCs removeObjectAtIndex:[VCs count] - 2]; 
} 
[self.navigationController setViewControllers: VCs]; 

In iOS 7 sto ottenendo il risultato desiderato. Ma per la versione 8.2 di iOS, il valore negli array VC mutabili è solo il current o topViewController nello stack. Ma il pulsante Indietro ti guiderà verso tutti i precedenti controllori di vista. Ma nessuno di essi è presente nello stack di navigazione. C'è qualche cambiamento nella gestione della navigazione in ios8?

Desidero eliminare la schermata di login viewcontroller dallo stack in modo che, facendo clic sul pulsante Indietro, non torni alla schermata di accesso. Sto affrontando questo problema solo in iOS 8.2 (potrebbe essere in iOS 8 e versioni successive). Quale può essere il problema?

Edit:

Nella prepareForSegue:, Sto usando il seguente codice:

if([[segue identifier] isEqualToString:@"mediaDetailSegue1"]) 
{ 
    MovieDetailViewController *movieDetail; 
    if(isIOS8SystemVersion) 
    { 
     movieDetail = ([[segue destinationViewController]viewControllers][0]); 
    } 
    else 
    { 
     movieDetail = [segue destinationViewController]; 
    } 

     movieDetail.videoData = [_mediaContentArray objectAtIndex:selectedIndex]; 
    } 

modo per le versioni iOS superiori a 8, il codice

movieDetail = ([[segue destinationViewController]viewControllers][0]); 

si chiama . Penso che questo stia causando il problema. Sto sbagliando?

+0

Avete effettuato l'allineamento su entrambe le versioni del sistema operativo e lo stesso scenario di test? – Wain

+0

sì. Nel mio iphone 4s con iOS 7.2, tutti i viewControllers sono visualizzati.Ma quando connetto un iphone 5s con iOS 8.2, il conteggio array è uno solo. Il topViewcontroller è lì nell'array.Ma il pulsante Indietro ti guiderà a tutti i precedenti viewcontrollers.Ma nessuno di loro è presente nello stack di navigazione. C'è qualche cambiamento nella gestione della navigazione in ios8? – abhi1992

+0

Bug abbastanza grande se lo è. Avete qualche altro codice che modifica lo stack? – Wain

risposta

1

ho avuto il motivo per cui il mio stack di navigazione sta avendo un solo viewController. In iOS8 e versioni successive, se si effettua un passaggio da una viewController a una seconda viewController attraverso il navigationController del secondo VC, quindi il NavigationStack del secondo VC conterrà solo il topViewController.

Ho cercato di creare un campione project.If la segue è dal VC a seconda VC direttamente, lo stack di navigazione VC2 conterrà VC1 e VC2.If la segue è attraverso il controller di navigazione di VC2, allora la navigazione la pila di VC2 conterrà solo VC2. Comportamento strano di iOS8.

In entrambi i casi, l'applicazione si comporta il simile in ios 7.Dont so perché si comporta strano in iOS 8

+0

Puoi spiegarci un po 'di più? – Hussein

0

Sto provando lo stesso con iOS 8.2. self.navigationController.viewControllers restituisce tutti i controller di visualizzazione nello stack. Non ci sono tali problemi. Non sono sicuro del motivo per cui si sta affrontando tale problema.

Provare a utilizzare questo codice. Funziona bene per me.

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; 

for(int i = 0; i < VCs.count; i++) 
{ 
    UIViewController *vc = VCs[i]; 
    if ([vc isKindOfClass:[LoginViewController class]]) 
    { 
     [VCs removeObjectAtIndex:i]; 
    } 

[self.navigationController setViewControllers: VCs]; 
+0

Grazie per il tuo tempo, ma self.navigationController.viewControllers contiene solo un Vc alla volta (iOS8). La mia logica funziona perfettamente per iOS 7. – abhi1992

+0

Hai usato segues tramite il controller di navigazione o direttamente a viewController? – abhi1992

+0

Ho capito il motivo, dai un'occhiata alla risposta se ne hai bisogno :): – abhi1992

Problemi correlati