Question

J'ai un UIViewController, ce contrôleur est contenu dans un NavigationController. J'ajoute un UITableViewController dans ce viewController. Je voudrais appeler une méthode de pushViewController quand je presse sur une cellule de mon tableView.

J'ai essayé ceci:

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;
}

Mais rien ne se passe. Je mets NSLog () à ma méthode de Pushit et je peux le voir. Je ne comprends pas pourquoi je ne peux pas le pousser.

Toute idée?

Était-ce utile?

La solution

UIViewController a une propriété nommée navigationController qui renverra un UINavigationController si l'on existe pour le contrôleur de vue son appelée.

En utilisant cette propriété, vous pouvez pousser les contrôleurs vue sur la pile de navigation à partir de la méthode de didSelectRowAtIndexPath: de votre point de vue de la table.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}

La raison pour laquelle votre code actuel ne fonctionne pas est sans doute à cause des éléments suivants:

  • Vous avez déjà une instance de FirstViewController, comme vous avez dit que vous avez ajouté une vue de tableau comme sous-vue
  • Vous essayez de créer une nouvelle instance d'un FirstViewController lorsque l'utilisateur tape une cellule, ce qui est sur la pile de navigation, afin d'essayer de pousser un contrôleur de vue sur la pile à partir de là ne fonctionne pas, parce que la propriété navigationController rendement nul.

Autres conseils

Vous alloc et init MyViewController mais jamais le pousser à la navigation ou de la fenêtre ou tout autre chose, alors vous pousser à Scont MyViewController, ce n'est pas présente à la fenêtre. Tout d'abord, essayez de ne pas utiliser MyViewController, essayez ensuite de pousser MyViewController à la navigation avant de pousser Scont en elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top