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?

È stato utile?

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.

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