2010-12-15 125 views
0

如何使單個單元格轉到不同的視圖控制器。現在,使用我使用的方法,如果我點擊第一個單元格,它會帶我到一個視圖控制器,我有一個圖片。現在,如果我返回並單擊第二個單元格,它會將我帶到相同的視圖控制器。我如何改變這一點,以便所有其他單個單元格都轉到單個視圖控制器?我要添加什麼或配置什麼?如何將單個數據添加到單個單元格?

這裏我的代碼:

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

回答

1

一個相當簡單的方法是在你的tableView:didSelectRowAtIndexPath方法:方法。您可以檢查索引路徑參數並執行不同的代碼路徑。例如:

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

與大多數設計選擇一樣,這只是一種可能方法的示例。這是我在這個一般情況下可以做的最好的。

0

我會每次創建一個新的視圖控制器,而不是使用相同的一個,只是改變它的屬性,更像是你在tableView:didSelectRowAtIndexPath:中註釋掉的例子。這隻有在您不從這些方法以外的任何地方訪問您的控制器時纔有效。

第一:從您的tableView刪除bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]];:的cellForRowAtIndexPath:方法(你應該這樣做,無論如何,因爲它只是把更多的處理器時間)

二:從你的類中刪除bookDetailController財產。你不會再需要它了。

三:實現的tableView:didSelectRowAtIndexPath方法:如下:

- (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]; 
} 
相關問題