2011-09-17 14 views
6

Attualmente, sto cercando di innescare il metodo 'didSelectViewController' di programmazione tramite il seguente codice:Come attivare il metodo "tabBarController: didSelectViewController:" a livello di codice?

self.tabController.selectedViewController 
     = [self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]; 

Tuttavia, il metodo 'didSelectViewController' non è stato chiamato. Come posso attivare il metodo senza dover selezionare manualmente la barra delle schede?

+1

N.B. il comportamento di 'tabBarController: didSelectViewController:' modificato con iOS 3. Nelle versioni precedenti a 3, questo metodo veniva chiamato sia per le modifiche programmatiche che per quelle avviate dall'utente al controller di visualizzazione selezionato. In iOS 3 e versioni successive, viene chiamato solo in risposta ai tocchi utente nella barra delle schede e non viene chiamato quando il codice modifica i contenuti della barra delle schede a livello di programmazione. – albertamg

+0

Mi chiedo perché vuoi raggiungere questo obiettivo. – Raptor

risposta

16
self.tabController.selectedIndex = NEWSTAB_INDEX; // to actually switch to the controller (your code would work as well) - not sure if this does or not send the didSelectViewController: message to the delegate 
[self.tabController.delegate tabBarController:self.tabController didSelectViewController:[self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]]; // send didSelectViewController to the tabBarController delegate 
+0

Questo ha funzionato. Ho provato! – user523234

+0

sì, funziona anche per me. Ma perché devi farlo? Nel mio caso, UITabbarControllerDelegate è una classe separata, NSObject, e implementa i metodi delegati. Il problema è che se cambio la scheda in modo programmatico, i metodi delegati non vengono chiamati. Se si passa facendo clic sulle schede stesse, funziona. Non è ancora possibile capire perché succede. – Zsolt

+0

@Zsolt è così che il delegato è stato pensato da Apple (attivato nell'interazione dell'utente), e ha senso in un certo senso. Quando viene modificato a livello di codice, sai già che è cambiato, quindi in alcune situazioni potrebbe non essere necessario avviare il delegato. –

0

per SWIFT 3.0 di programmazione è possibile chiamare TabBar metodo delegato come questo

self.tabController.selectedIndex = index (e.g. 0,1...etc) 
self.tabController.delegate.tabBarController(self.tabController, didSelectViewController: self.tabController.viewControllers[index]) 
Problemi correlati