2010-12-15 7 views
0

Comment faire que les cellules individuelles vont à différents View Controller. À l'heure actuelle, en utilisant la méthode im en utilisant, si je clique sur la première cellule, il m'amène à un contrôleur de vue où j'ai une photo. maintenant si je reviens et clique sur la deuxième cellule, il me prend au même contrôleur de vue. Comment est-ce que je change ceci de sorte que toutes les autres cellules individuelles vont au contrôleur individuel de vue? qu'est-ce que j'ajoute ou que dois-je configurer?comment ajouter des données individuelles à des cellules individuelles?

ici mon code:

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 

NSUInteger row = [indexPath row]; 
cell.textLabel.text = [breakdownArray objectAtIndex:row]; 

bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 
/* 
    <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; 
    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
    */ 

NSInteger row = [indexPath row]; 
if (self.bookDetailViewController == nil); { 
    BookDetailViewController *aBookDetail = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:nil]; 
    self.bookDetailViewController = aBookDetail; 

    [aBookDetail release]; 

} 

bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]]; 

Books2010AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.breakdownNavController pushViewController:bookDetailViewController animated:YES]; 
} 

Répondre

1

Une façon assez facile dans votre tableView: didSelectRowAtIndexPath: méthode. Vous pouvez vérifier le paramètre de chemin d'index et exécuter différents chemins de code. Quelque chose comme:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath)indexPath { 
    switch(indexPath.row) { 
     case 1: 
      [self.navigationController pushViewController:someViewController animated:YES]; 
      break; 
     case 2: 
      [self.navigationController pushViewController:someOtherViewController animated:YES]; 
      break; 
    } 
} 

Comme la plupart des choix de conception, ceci est juste un exemple d'une approche possible. C'est le mieux que je puisse faire dans ce cas général.

0

Je créerais un nouveau contrôleur de vue à chaque fois au lieu d'utiliser le même et juste en changeant ses propriétés, plus comme l'exemple que vous avez commenté dans tableView: didSelectRowAtIndexPath :. Cela ne fonctionnera que si vous n'accédez pas à votre contrôleur depuis un autre endroit que ces méthodes.

Première: Supprimer bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]]; de votre tableView: cellForRowAtIndexPath: méthode (vous devriez le faire de toute façon, car il est en train de prendre plus de temps processeur)

Deuxième: Retirez la propriété bookDetailController de votre classe. Vous n'en aurez plus besoin.

Troisième: Mettre en œuvre tableView: didSelectRowAtIndexPath: comme suit:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)path { 
    BookDetailViewController *bookDetailViewController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:nil]; 
    NSInteger row = path.row; 
    bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]]; 
    //Any other setup on view controller 
    Books2010AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    [delegate.breakdownNavController pushViewController:bookDetailViewController animated:YES]; 
    [bookDetailViewController release]; 
} 
Questions connexes