2010-11-10 5 views
0

HI,Comment insérer un nouveau viewController dans une vue de table qui est une vue insérée d'un contrôleur de navigation?

J'ai un HomeViewController.m dans lequel je pousse SpecificViewController par self.navigationController,

SpecificViewController *specificViewController= 

[[SpecificViewController alloc] initWithNibName: @ paquet "SpecificViewController": nil];
[self.navigationController pushViewController: specificViewController animé: OUI];

Et dans SpecificViewController.m insérer un sous-vue

FirstViewController *firstViewController 
=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
[self.view insertSubview:firstViewController.view atIndex:0]; 

Et FirstViewController.m, il y a un tableview. La question est comment puis-je pousser un nouveau ViewController par navigationController, j'ai essayé ci-dessous, mais cela ne fonctionne pas.

-(void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath  
{ 
DetailTableViewController *detail = 
[[DetailTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[self.navigationController pushViewController:detail animated:YES]; 
[detail release]; 
[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

je encore essayé une nouvelle UINavigationController,

UINavigationController *NEWnavigationController; 
NEWnavigationController=[[UINavigationController alloc] init];     
[NEWnavigationController pushViewController:detail animated:YES]; 

mais il ne fonctionne toujours pas. Pourriez-vous me donner une suggestion?

Répondre

1

Il y a pas mal de problèmes avec votre approche.

Premièrement, SpecificViewController est-il le premier contrôleur de vue que vous chargez? Si oui, alors vous ne poussez pas ce contrôleur de vue plutôt que vous définissez comme le contrôleur de vue racine dans votre délégué de l'application comme indiqué ci-dessous

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:[[SpecificViewController alloc] init]; 

Cela garantira que votre contrôleur de navigation est installé et le premier contrôleur de vue qui apparaît est le SpecificViewController

Deuxièmement, vous n'insérez pas de contrôleur de vue en tant que sous-vue. Si vous essayez de charger un deuxième contrôleur de vue, vous devez l'insérer dans la pile de votre contrôleur de navigation. Vous pouvez le faire à partir de SpecificViewController comme indiqué ci-dessous.

FirstViewController *firstViewController =[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 

[self.navigationController pushViewController:firstViewController animated:YES]; 
Questions connexes