2013-08-13 56 views
6

Pracuję nad aplikacją na iOS, która ma kontroler UITabBarController do wyświetlania TabBar. W niektórych miejscach przedstawiam pełny ekran modalView ukrywający tabBar.Sprawdź, czy tabBar jest widoczny w aplikacji iOS

Chcę wykryć, kiedy mój tabBar jest widoczny dla użytkownika. Czy jest jakiś sposób, aby sprawdzić automatycznie, gdy de tabBar jest widoczny, czy nie?

Próbowałem że:

Ale to naprawdę nie działa, ponieważ umieszczenie zakładek nie jest tak naprawdę ukryte.

if ([[[appdelegate tabBarController] tabBar] isHidden]) 
{ 
    NSLog(@"tabBar IS HIDDEN"); 
} 
else 
{ 
    NSLog(@"tabBar IS VISIBLE"); 
} 

piszę ten kod w BaseViewController który jest super klasa moim zdaniem modalnej oraz innych widoków w moim projekcie.

Dzięki.

+0

I próbował z 'if ([[[self tabBarController] tabBar] isHidden])' i działa bardzo dobrze. – Bhavin

Odpowiedz

4

Można spróbować to

if ([[[self tabBarController] tabBar] isHidden]){ 

    NSLog(@"tabBar IS HIDDEN"); 
} 
else 
{ 
    NSLog(@"tabBar IS VISIBLE"); 
} 
7

Kontrola ta [[[self tabBarController] tabBar] isHidden] jest w porządku, ale w jednym przypadku będzie to niepowodzeniem. Jeśli nie masz paska kart w tym widoku (w ogóle), wtedy [self tabBarController] zwraca nil, więc wywołanie hasHever zwróci NO, co jest prawdą, ale musisz wykryć tę sytuację, że jest inaczej. Nie jest ukryty, ale nie wychodzi, z wyjątkiem sprawdzania, czy powinieneś dodać [self tabBarController] != nil. Więc w zasadzie:

if([self tabBarController] && ![[[self tabBarController] tabBar] isHidden]){ 
    //is visible 
} else { 
    //is not visible or do not exists so is not visible 
} 
-1

Sprawdź własnością tabBarwindow. Ta właściwość jest ustawiona na nil, ponieważ jest to UIView nie jest widoczne.

if((BOOL)[[[self tabBarController] tabBar] window]) 
{ 
    // visible 
} 
else 
{ 
    // not visible 
} 
0

Jest to prawdopodobnie najprostszy sposób: (zakładając, że nie grają bezpośrednio z widokiem)

ViewController który ma zostać przesunięta do navigationController ma właściwość hidesBottomBarWhenPushed. Sprawdź, czy w kontrolce widoku jest TAK i wiesz, czy tabbar był ukryty czy nie.

1

odpowiedzi w Swift 3/4 +

if 
    let tabBarController = self.tabBarController, 
    !tabBarController.tabBar.isHidden { 
    // tabBar is visible 
} else { 
    // tabBar either is not visible or does not exist 
} 
0

Używam tego w Swift:

tabBarController?.tabBar.isHidden ?? true 

Używam go znaleźć wysokość bar zakładka:

var tabBarHeight: CGFloat { 
    if tabBarController?.tabBar.isHidden ?? true { return 0 } 
    return tabBarController?.tabBar.bounds.size.height ?? 0 
}