2012-11-14 32 views
3

這是我最終想要做的。我想在UITableView中顯示一個菜單項,但動態顯示,以便顯示的項目類型決定了加載的自定義單元格視圖。例如,假設菜單項類型是'switch',那麼它將加載一個名爲'switch.xib'的nib,並且狀態將根據該特定菜單項的值而打開/關閉。可能有5個項目是「切換」類型,但是不同的值。所以我想爲每一個使用相同的xib,但是有5個實例。如何使用動態重用標識符設置和取消定製UITableViewCell?

所以,很長的路要走。當我從nib加載單元格視圖時,我認爲它需要唯一的重新使用標識符來表示出現在屏幕上的滾動時間,對嗎? (對於每個實例,即每個菜單項都是唯一的)。在Interface Builder中的UITableViewCell中,我看到了可以設置重用標識符屬性的位置,但是我希望在運行時爲交換機的每個實例設置它。例如,菜單項#1是開關,#2是文本字段,#3是開關等。因此#1和#3都需要唯一的小區ID來出隊。

這裏是我的cellForRowAtIndexPath是什麼樣子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Cells are unique; dequeue individual cells not generic cell formats 
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row]; 

ITMenuItem *menuItem = [menu.menuItems objectAtIndex:indexPath.row]; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    // Load cell view from nib 
    NSString *cellNib = [NSString stringWithFormat:@"MenuCell_%@", menuItem.type]; 
    [[NSBundle mainBundle] loadNibNamed:cellNib owner:self options:nil]; 
    cell = myCell; 
    self.myCell = nil; 
} 
// Display menu item contents in cell 
UILabel *cellLabel = (UILabel *) [cell viewWithTag:1]; 
[cellLabel setText:menuItem.name]; 
if ([menuItem.type isEqualToString:@"switch"]) { 
    UISwitch *cellSwitch = (UISwitch *) [cell viewWithTag:2]; 
    [cellSwitch setOn:[menuItem.value isEqualToString:@"YES"]]; 
} 
else if ([menuItem.type isEqualToString:@"text"]) { 
    UITextField *textField = (UITextField *) [cell viewWithTag:2]; 
    [textField setText:menuItem.value]; 
} 

return cell; 
} 
+0

什麼是你的問題?你有什麼問題?什麼錯誤信息? –

+0

對不起,說清楚可能有點難。問題是,我如何在分配單元時爲單元添加重用標識符,以便出列工作? –

回答

0

您可以在筆尖文件重用標識符。所以對於switch.xib,你可以使用'switch'作爲重用標識符。然後,只需改變

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];

NSString *CellIdentifier = menuItem.type;

假設menuItem.type是 '開關'

+0

正確,menuItem.type是'開關','文本'等。這個問題是沒有唯一性的個人實例;假設我在同一個菜單中有5個「切換」菜單項,這不是問題嗎?也許它不會,也許我在想它。 –

+0

是的,這正是你想要的。具有相同的重用標識符意味着「switch」單元的一個實例可以重用於不同的交換機。 – Aleph7

+0

在我的情況下,少量的菜單項目,它似乎工作正常,沒有增加內存使用情況,根本沒有出隊。我不知道它是否會導致問題,如果它試圖顯示多個「開關」單元格,例如,一次在屏幕上。可能不會,因爲唯一的出隊將是細胞滾動屏幕。由於菜單不長,無論如何不會有太多排隊。謝謝你的提示! –

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"Cell"; 
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if(cell == nil) 
    { 
     cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    TextFieldFormElement *item = [self.formItems objectAtIndex:indexPath.row]; 
    cell.labelField.text = item.label; 
    return cell; 
} 
+0

是否可以從xib加載它? – igrek