2010-06-08 6 views
1

J'ai créé les contrôleurs de vue et les ai attachés pour contrôler leurs vues respectives. Je ne peux pas comprendre comment faire le code suivant pour aller les vues à droite, bien (ce qui est dans le contrôleur de vue racine):Sélection d'une ligne pour modifier la vue

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    RunViewController *runViewController = [[RunViewController alloc] initWithNibName:@"RunView" bundle:[NSBundle mainBundle]]; 
    CalcViewController *calcViewController = [[CalcViewController alloc] initWithNibName:@"CalcView" bundle:[NSBundle mainBundle]]; 
    PushViewController *pushViewController = [[PushViewController alloc] initWithNibName:@"PushView" bundle:[NSBundle mainBundle]]; 
    SitViewController *sitViewController = [[SitViewController alloc] initWithNibName:@"SitView" bundle:[NSBundle mainBundle]]; 
    TimerViewController *timerViewController = [[TimerViewController alloc] initWithNibName:@"TimerView" bundle:[NSBundle mainBundle]]; 

    [self.navigationController pushViewController:runViewController animated:YES]; 
    [runViewController release]; 
    [self.navigationController pushViewController:pushViewController animated:YES]; 
    [pushViewController release]; 
    [self.navigationController pushViewController:sitViewController animated:YES]; 
    [sitViewController release]; 
    [self.navigationController pushViewController:timerViewController animated:YES]; 
    [timerViewController release]; 
    [self.navigationController pushViewController:calcViewController animated:YES]; 
    [calcViewController release]; 

    runViewController = nil; 
    pushViewController = nil; 
    sitViewController = nil; 
    timerViewController = nil; 
    calcViewController = nil; 
} 

Chaque fois que je sélectionne l'une des lignes de la table - tous les points de vue viennent. Comment puis-je les arranger pour n'ouvrir que la vue prévue?

Répondre

1

Le problème est que vous appelez pushViewController:animated sur chaque contrôleur de vue. Si vous ne voulez qu'un des contrôleurs de vue à venir, appelez pushViewController:animated uniquement sur celui que vous voulez. Voici un exemple:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath { 

    // This code shows a different view depending on the selected row. 
    UIViewController *viewController = nil; 
    switch (indexPath.row) { 
     case 0: 
      viewController = [[RunViewController alloc] initWithNibName:@"RunView" bundle:[NSBundle mainBundle]]; 
      break; 

     case 1: 
      viewController = [[CalcViewController alloc] initWithNibName:@"CalcView" bundle:[NSBundle mainBundle]]; 
      break; 

     case 2: 
      viewController = [[PushViewController alloc] initWithNibName:@"PushView" bundle:[NSBundle mainBundle]]; 
      break; 

     case 3: 
      viewController = [[SitViewController alloc] initWithNibName:@"SitView" bundle:[NSBundle mainBundle]]; 
      break; 

     case 4: 
      viewController = [[TimerViewController alloc] initWithNibName:@"TimerView" bundle:[NSBundle mainBundle]]; 
      break; 
    } 

    if (viewController != nil) { 
     [self.navigationController pushViewController:viewController animated:YES]; 
     [viewController release]; 
    } 

}

Questions connexes