如何将单个数据添加到单个单元格?

时间:2010-12-15 02:34:59

标签: iphone uitableview

如何使单个单元格转到不同的View Controller。现在,使用我使用的方法,如果我点击第一个单元格,它会带我到一个视图控制器,我有一张照片。现在,如果我返回并单击第二个单元格,它将带我到同一个视图控制器。如何更改此设置以便所有其他单个单元格转到单个视图控制器?我要添加什么或者我配置什么?

这里是我的代码:

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

2 个答案:

答案 0 :(得分: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;
   }
}

与大多数设计选择一样,这只是一种可能方法的示例。在这种一般情况下,这是我能做的最好的事情。

答案 1 :(得分:0)

我每次都会创建一个新的视图控制器,而不是使用相同的视图控制器,只是更改它的属性,更像是你在tableView中注释掉的例子:didSelectRowAtIndexPath:。这仅在您不从这些方法以外的任何位置访问控制器时才有效。

首先:从tableView:cellForRowAtIndexPath:方法中删除bookDetailViewController.title = [NSString stringWithFormat:@"%@" , [breakdownArray objectAtIndex:row]];(无论如何,你应该这样做,因为它只需要更多的处理器时间)

第二步:从你的类中删除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];
}