2013-05-28 24 views
11

Dzięki za przeczytanie mojego pytania.Zapobieganie zmianie tabulatora w określonym indeksie - IOS

Próbuję zaimplementować menu kontekstowe, gdy użytkownik kliknie kartę z indeksem 4. Tak więc staram się zapobiec przełączaniu kontrolki viewbar po naciśnięciu indeksu 4.

Oto mój kod:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){   
     NSLog(@"NO"); 
     return NO; 
    }else{ 
     NSLog(@"YES"); 
     return YES; 
    } 

} 

mam wdrożony UITabBarControllerDelegate i self.delegate = self; w viewDidLoad i to działa, ale tylko jeden raz.

Po kliknięciu na kartę indeksu 4 pojawia się menu i tabbar nie przełącza widoku (GREAT), ale po ponownym kliknięciu widok zmienia się, nawet jeśli otrzymam dziennik "NIE". Co może być problemem?

Dzięki za wszelkie sugestie!

SOLVED

Dzięki za odpowiedź Kasaname poniżej Rozwiązałem go dodając SelectedIndex i ustawić go na indeksie flagi (prevtab). Zmienić prevtab do indeksu ostatniej wybranej zakładki, z wyjątkiem stałych, gdy użytkownik wybierze indeks 4. Moja ostatnia Kod:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){ 
     self.selectedIndex = prevTab; //only change in this method  
     return NO; 
    }else{   
     return YES; 
    } 

} 
+0

Dlaczego nie używasz tylko pustego ViewController na czwartej karcie? – NSDmitry

+0

Dodaj punkt przerwania, aby wyświetlić metodyDidAppear/viewWillAppear kontrolera widoku. Zgodnie z dokumentacją ta metoda nazywana jest niezależnie od tego, czy wybrany kontroler widoku zmienił się. –

+1

@ProFFeSSoR: Co masz na myśli przez 'pusty ViewController dla czwartej karty?' –

Odpowiedz

4
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (tabBarController.selectedIndex == 0) { 

    } else if (tabBarController.selectedIndex == 1) { 

    } else if (tabBarController.selectedIndex == 2) { 

    } 
} 

dlaczego nie u używać tego delegata Używaj tego delegat będzie działać Przypuszczam

+0

w jaki sposób "selectedIndex" może mieć wartość 0, jeśli zostanie ponownie dotknięte? –

+0

tutaj selectedindex odnosi się do indeksu elementów paska kart, więc będzie to pierwszy dla pierwszego. – Kasaname

+0

aw powyższym wazonie właśnie podałem przykład i jego upto do osoby, jak używać i dla których wybrany indeks – Kasaname

2

ten sposób można zatrzymać/zapobiec przedmioty umieszczenie zakładek przełączyć kartę w punkcie umieszczenie zakładek kliknij

dla Swift 3.0

Upewnij się, że wdrożone UITabBarControllerDelegate i ustawić UITabBarController „s delegat do własnym

wtedy przesłonić to delegata w kontrolerze

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

    if viewController == tabBarController.viewControllers?[2] { 
     return false 
    } else { 
     return true 
    } 
} 
+0

to działa, jeśli upewnisz się, że wdrażasz ** UITabBarControllerDelegate ** i ustawienie ** delegate = self użytkownika UITabbarController. –

Powiązane problemy