如何使单个单元格转到不同的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];
}
答案 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];
}