pushViewController con tableViewController in viewController
Domanda
Ho un UIViewController, questo controller è contenuto in una navigationController. Aggiungo un UITableViewController in questo viewController. Vorrei chiamare un metodo pushViewController quando premo su una cellula del mio tableView.
Ho provato questo:
UITableViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
FirstView *myViewController = [[FirstView alloc] init];
[f myViewController];
}
UIViewController (FirstView)
-(void)pushIt
{
SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:sCont animated:YES];
NSLog(@"didSelect"); // is printed
[sCont release];
sCont = nil;
}
Ma nulla accade. Ho messo NSLog () per il mio metodo Pushit e posso vederlo. Quindi non capisco perché non riesco a spingerlo.
Qualche idea?
Soluzione
UIViewController
ha una proprietà denominata navigationController
che restituirà un UINavigationController
se ne esiste una per il controller di vista la sua chiamata da.
Utilizzando questa proprietà, si può spingere vista controllori nello stack di navigazione dal metodo didSelectRowAtIndexPath:
del vostro vista tabella.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:sCont animated:YES];
[sCont release];
}
Il motivo per il vostro codice attuale non funziona è probabilmente per i seguenti motivi:
- È già un'istanza di FirstViewController, come hai detto è stata aggiunta una vista tabella come visualizzazione secondaria
- Si tenta e crea una nuova istanza di un FirstViewController quando l'utente tocca una cella, che non è in pila di navigazione, in modo da cercare di spingere un controller della vista nello stack da lì non funziona, perché la proprietà
navigationController
restituisce nulla.
Altri suggerimenti
alloc e init myViewController ma mai spingerlo alla navigazione o di una finestra o di qualsiasi altra cosa, allora si spingono scont a myViewController, che non è presente alla finestra. In primo luogo, cercare di non utilizzare myViewController, accanto provare a spingere myViewController alla navigazione prima di spingere scont in esso.