2012-08-07 71 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」來填充它時訪問每個元素。假設你正在回收單元格,你總是用適當的數據設置任意視圖的元素。

如上所述,更傳統的方法是在一個筆尖實例化一個單元,然後執行相同的操作 - 每個要訪問的元素都有一個唯一標記。