2010-12-15 5 views
0

Wie die einzelnen Zellen zu verschiedenen View Controller gehen. Im Augenblick, wenn ich die Methode benutze, wenn ich auf die erste Zelle klicke, bringt es mich zu einem View-Controller, wo ich ein Bild habe. Wenn ich jetzt zurückgehe und auf die zweite Zelle klicke, komme ich zum selben View-Controller. Wie ändere ich das so, dass alle anderen einzelnen Zellen zum individuellen Ansichtscontroller gehen? Was füge ich hinzu oder was konfiguriere ich?Wie füge ich individuelle Daten zu einzelnen Zellen hinzu?

hier mein 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]; 
} 

Antwort

1

Eine recht einfache Art und Weise ist in Ihrem Tableview: DidSelectRowAtIndexPath: Methode. Sie können den Indexpfadparameter überprüfen und verschiedene Codepfade ausführen. Etwas wie:

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

Wie die meisten Design-Optionen ist dies nur ein Beispiel für einen möglichen Ansatz. Das ist das Beste, was ich in diesem allgemeinen Fall tun kann.

0

Ich würde jedes Mal einen neuen View-Controller erstellen, anstatt denselben zu verwenden und nur seine Eigenschaften zu ändern, eher wie das Beispiel, das Sie in tableView auskommentiert haben: didSelectRowAtIndexPath :. Dies funktioniert nur, wenn Sie nicht von anderen als diesen Methoden auf Ihren Controller zugreifen.

Zuerst: Entfernen bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]]; von Ihrem Tableview: cellForRowAtIndexPath: Methode (Sie sollten dies trotzdem tun, da es gerade ist mehr Prozessorzeit nehmen)

Zweitens: Aus der Klasse der bookDetailController Eigenschaft. Du wirst es nicht mehr brauchen.

Drittens: Implementieren Tableview: DidSelectRowAtIndexPath: wie folgt:

- (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]; 
} 
Verwandte Themen