2013-08-13 8 views
6

Sto lavorando a un'app per iOS con UITabBarController per mostrare una TabBar. In alcuni casi, presento uno schermo intero modalView che nasconde il tabBar.Controlla se TabBar è visibile sull'app per iOS

Voglio rilevare quando il mio tabBar è visibile per l'utente. C'è un modo per controllare automaticamente quando de tabBar è visibile?

ho provato:

Ma in realtà non funzionano perché la barra delle linguette non è realmente nascosto.

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

scrivo questo codice in un BaseViewController che è super classe di mio punto di vista modale e le altre viste del mio progetto.

Grazie.

+0

I provato con 'if ([[tabBarController] tabBar] isHidden])' e funziona molto bene. – Bhavin

risposta

4

Si può provare questo

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

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

Selezionando questa [[[self tabBarController] tabBar] isHidden] va bene, ma in un caso fallirà. Se non si dispone di una barra delle schede in quella vista (per nulla), quindi [self tabBarController] restituisce nil, in modo che la chiamata isHidden restituirà NO, che è la verità, ma è necessario rilevare tale situazione che è un altro caso. Non è nascosto ma non esce così, tranne che per il controllo devi aggiungere [self tabBarController] != nil. Quindi, in pratica:

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

Controllare la window proprietà di tabBar. Questa proprietà è impostata su nil, dal momento che è UIView non visibile.

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

Questo è probabilmente modo più semplice: (supponendo che non sta giocando direttamente con vista)

ViewController che sta per essere spinto a navigationController ha una proprietà hidesBottomBarWhenPushed. Basta controllare se è SÌ nel controller della vista e sai se la tabbar era nascosta o meno.

1

risposta in 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

Io uso questo a Swift:

tabBarController?.tabBar.isHidden ?? true 

Io lo uso per trovare l'altezza barra delle schede:

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