2012-08-07 70 views
0

我有多个表视图显示不同的项目。每个单元格的细节视图应该具有相同的布局。我想为每个表的所有单元使用相同的详细视图,而不必为每个表实现不同的详细视图类,因为它几乎是相同的代码。我该怎么做呢?Xcode重用多表视图的详细视图

以下方法位于其中一个表视图中。这将显示详细视图在选择的小区:

-(void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"didSelectRowAtIndexPath"); 
    AppDelegate *delegate = 
     (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    Detail *detail= 
     [[Detail alloc] initWithIndexPath:indexPath]; 

    [delegate.navController pushViewController:detail animated:YES]; 

    [tv deselectRowAtIndexPath:indexPath animated:YES]; 
} 

以下是viewDidLoad方法中的详细视图类:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    AppDelegate *delegate = 
    (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    PokemonInfo *thisPokemon = [delegate.allArray objectAtIndex:index.row]; 
    self.title = thisPokemon.name; 

    nameView.text = thisPokemon.name; 
    typeView.text = thisPokemon.type; 
    attackView.text = thisPokemon.attack; 
    attackView.editable = NO; 
} 
+0

贾斯汀, 你可以有几种方式来做到这一点: - 创建一个方法,要么再次启动你的详细视图控制器。初始化时传递PokemonInfo对象。 - 或者只分配一次,只需使用实例方法和值对象。 基本上,您在didLoad中执行的操作将在创建控制器时放置负载。 – Tarun 2012-08-07 18:35:29

+0

感谢您的建议。我有一个使用indexPath启动单元格的方法。我只是改变了方法,以便它也接受来自调用者的关键字来标识它是哪个表,以便它可以在viewDidLoad方法中显示适当的数组。 – apples 2012-08-07 18:53:09

回答

0

创建视图打下出来的笔尖。在视图中给每个元素一个唯一的标签。当你需要使用nib(UINib)实例化视图时,当你想通过使用“viewWithTag”来填充它时访问每个元素。假设你正在回收单元格,你总是用适当的数据设置任意视图的元素。

如上所述,更传统的方法是在一个笔尖实例化一个单元,然后执行相同的操作 - 每个要访问的元素都有一个唯一标记。