2015-04-06 17 views
5

W moim projekcie użyłem kodu do obsługi przycisku Wstecz w następujący sposób.navigationController.viewControllers Działa inaczej w systemie iOS 8.2

W systemie iOS 7 uzyskuję pożądany wynik. Ale dla wersji 8.2 systemu iOS wartość w tablicach wirtualnych tablicy zmiennych jest tylko bieżącym lub topViewController w stosie. Ale przycisk wstecz będzie nawigował do wszystkich poprzednich kontrolerów view. Ale żaden z nich nie jest obecny w stosie nawigacyjnym. Czy jest jakaś zmiana w obsłudze nawigacji w ios8?

Chcę usunąć kontroler widoku ekranu logowania ze stosu, aby po kliknięciu przycisku Wstecz nie wracał do ekranu logowania. Mam do czynienia z tym problemem tylko w iOS 8.2 (może w iOS 8 i wyżej). Jaki może być problem?

Edit:

W prepareForSegue:, używam następujący kod:

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

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

więc dla wersji iOS powyżej 8, kod

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

nazywa . Myślę, że to powoduje problem. Czy robię to źle?

+0

byłaś zalogowany tablicę na obu wersjach systemu operacyjnego i tym samym scenariuszu testowym? – Wain

+0

Tak. W moim iphone 4s z ios 7.2, wszystkie viewControllery wyświetlają się. Ale kiedy podłączam iphone 5s z ios 8.2, conunt array jest jeden.nie tylko topViewcontroller jest tam w tablicy.Ale tylny przycisk będzie nawigował ciebie do wszystkich poprzednich kontrolerów podglądu. Ale żaden z nich nie jest obecny w stosie nawigacji. Czy jest jakaś zmiana w obsłudze nawigacji w ios8? – abhi1992

+0

Całkiem duży błąd, jeśli tak jest. Czy masz jakiś inny kod, który modyfikuje stos? – Wain

Odpowiedz

1

mam powód dlaczego moja nawigacja Stos jest posiadanie tylko jednego viewController. W iOS8 i powyżej, jeśli dokonamy przejścia z kontrolki viewController na drugi viewController za pomocą elementu navigationController drugiego VC, to element navigationStack drugiego VC będzie zawierał tylko kontroler topViewController.

Próbowałem utworzyć przykładowy projekt. Jeśli przejście jest od VC do drugiego VC bezpośrednio, to stos nawigacyjny VC2 będzie zawierał VC1 i VC2. Jeśli przejście jest przez kontroler nawigacyjny VC2, to nawigacja stos VC2 będzie zawierał jedynie VC2. Dziwne zachowanie iOS8.

W obu tych przypadkach, aplikacja zachowuje się podobnie w iOS 7.Dont wiem dlaczego zachowuje się w dziwny systemów iOS 8

+0

Czy możesz wyjaśnić nieco więcej? – Hussein

0

Próbuję to samo z systemem iOS 8.2. self.navigationController.viewControllers zwraca wszystkie kontrolery widoku w stosie. Nie ma takich problemów. Nie wiem, dlaczego masz do czynienia z takim problemem.

Spróbuj użyć tego kodu. Działa to dobrze dla mnie.

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

Dziękuję za poświęcony czas, ale self.navigationController.viewControllers zawiera tylko jeden Vc naraz (iOS8). Moja logika działa dobrze dla iOS 7. – abhi1992

+0

Czy użyłeś segues za pomocą kontrolera nawigacyjnego lub bezpośrednio do viewController? – abhi1992

+0

Mam powód, Spójrz na odpowiedź, jeśli potrzebujesz :) :) – abhi1992

Powiązane problemy