Domanda

Sto riscontrando un problema con una tabella e sto visualizzando un'altra vista quando l'utente tocca una cella della tabella. Sto usando un UITabBarController per la vista principale per mostrare diverse viste. Quindi uso un UINavigationController quando l'utente seleziona una vista UITableView per visualizzare la vista successiva dalla selezione della cella della tabella.

Il mio problema è questo: quando selezionano la cella della tabella, la cella viene evidenziata e la vista successiva non appare. Sto usando IB. Tutti gli esempi che ho trovato lo stanno facendo allo stesso modo, tranne gli esempi funzionano!

Ho i controller caricati in un NSMutableArray con un dizionario. Ho anche provato questo codice creando direttamente un controller di visualizzazione anziché utilizzare l'elemento dell'array. Stessi risultati ....

Ho controllato il controller di destinazione (Calc1ViewController) per assicurarmi che non ci fosse nulla di sbagliato nel controller. Quando viene mostrato direttamente, il controller (Calc1ViewController) viene visualizzato correttamente.

Ecco un po 'di codice .....

L'inizializzazione del view controller nel dizionario:

Calc1ViewController *calc1ViewController = [[Calc1ViewController alloc] init];
[menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                     NSLocalizedString(@"SSC - page 1",@""), @"title",
                     calc1ViewController, @"viewController",
                     nil]];
[calc1ViewController release];

Ho anche provato questo senza usare il dizionario - creando un controller di visualizzazione al posto di [[menuList objectAtIndex: ...]; line - creando il controller di visualizzazione in questo modo:

Calc1ViewController *targetViewController = [[Calc1ViewController alloc] init];


// the table's selection has changed, switch to that item's UIViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[menuList objectAtIndex: indexPath.row] objectForKey:@"viewController"];
    [[self navigationController] pushViewController:targetViewController animated:YES];
    targetViewController = nil;
}

Il controller di navigazione è definito in AppDelegate e collegato a RootViewController tramite IB.

Quando seleziono una riga della tabella, viene mostrato nel debugger che il codice pushViewController viene eseguito, ma la vista successiva non mostra. Ecco un esempio:

alt text http://thecoolestcompany.com/ssc-table-view.jpg

Qualche idea?

È stato utile?

Soluzione

Finalmente capito ...

Avevo UINavigationController e UITabBarController sullo stesso livello. Dopo aver spostato il controller di navigazione da bambino sul controller della barra delle schede, tutto ha funzionato. Puoi aggiungere tutti i controller di navigazione a una barra delle schede che desideri. In IB è un po 'confuso. È necessario trascinare NavigationController nella barra dei menu come nuovo elemento della barra delle schede.

Altri suggerimenti

Non c'è molto da fare con il codice che hai fornito. L'unica cosa a cui riesco a pensare senza guardare più codice è che forse non hai inizializzato correttamente il tuo controller di visualizzazione (quello nel tuo dizionario), o affatto, o il dizionario a cui stai accedendo non è quello corretto ...

Qual è il valore di [self navigationController] quando viene chiamato pushViewController. È zero?

Qual è il valore di targetViewController quando viene passato a pushViewController. È zero?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top