2010-11-16 14 views
16

Voglio disabilitare l'azione predefinita quando l'utente tocca la voce della barra delle linguette.Disabilita azione: l'utente tocca l'elemento della barra delle schede per passare al controller della vista radice

Ad esempio, ho una tabbar con Tab1, Tab2 e Tab3. In Tab1, l'utente può navigare da View1 a View3 (View1> View2> View3). Se l'utente è in View3 e tocca la Tab1, l'applicazione porta l'utente a View1 (il controller della vista radice). Voglio disabilitare questa funzionalità. Non voglio che tocchi Tab1 per visualizzare tutti i controller di visualizzazione. Come lo posso fare?

Edit:

Questo comportamento è un po 'strano, ma una scorciatoia a portata di mano in caso di gerarchia profonda!

È possibile implementare i seguenti metodi UITabBarControllerDelegate per disabilitare questo sistema a livello di scelta rapida:

#pragma mark - 
#pragma mark UITabBarControllerDelegate 

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *tbSelectedController = tbc.selectedViewController; 

    if ([tbSelectedController isEqual:vc]) { 
     return NO; 
    } 

    return YES; 
} 

risposta

19

se si guarda al delegato UITabBarController c'è un metodo:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

Se si implementa questa nella tua classe , è possibile verificare se UIViewController è già visualizzato e quindi restituire NO, il che impedirà che ciò accada.

Ho avuto lo stesso problema con un oggetto ABPeoplePicker incorporato in un UITabBarController, in che premendo scheda 'Contatti' la seconda volta che è stato già visualizzato renderebbe il controllo ABPeoplePicker mostrare i 'Gruppi'

+0

funzionato! Grazie. – Mustafa

Problemi correlati