2011-12-19 113 views
0

到目前爲止搜索堆棧溢出我還沒有發現像我的情況。任何幫助都非常感謝:我一直看到,如果我在A人身上勾上勾號,H人也會有一個人,並且約有10人離開。基本上每10個重複一個複選標記。帶複選標記的UITableViewCell,複製複選標記

這裏是我的代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{static NSString *CellIdentifier = @"MyCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

      } 

cell.textLabel.text = 

[NSString stringWithFormat:@"%@ %@", [[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"FirstName"],[[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"LastName"]]; 
cell.detailTextLabel.text = 

[NSString stringWithFormat:@"%@", [[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"Address"]]; 

return cell; 

}

在我做了選擇行的索引路徑我有這樣的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
UITableViewCell *cell; 
cell = [self.tableView cellForRowAtIndexPath: indexPath]; 

if ([[myArrayOfAddressBooks objectAtIndex:indexPath.row] objectForKey:@"emailSelected"] != @"YES") 
{  
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
[[myArrayOfAddressBooks objectAtIndex:indexPath.row] setValue:@"YES" forKey:@"emailSelected"]; 
} 
else 
{  
    cell.accessoryType = UITableViewCellAccessoryNone; 
    [[myArrayOfAddressBooks objectAtIndex:indexPath.row] setValue:@"NO" forKey:@"emailSelected"]; 
}  

回答

6

這是由於如何UITableView 「回收」 UITableViewCell出於提高效率的目的,以及您在選擇細胞時如何標記細胞。

您需要爲在tableView:cellForRowAtIndexPath:內處理/創建的每個單元格刷新/設置accessoryType值。您如何正確在myArrayOfAddressBooks數據結構更新的狀態,你只需要在tableView:cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    static NSString *CellIdentifier = @"MyCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSDictionary *info = [myArrayOfAddressBooks objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", [info objectForKey:@"FirstName"],[info objectForKey:@"LastName"]]; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [info objectForKey:@"Address"]]; 

    cell.accessoryType = ([[info objectForKey:@"emailSelected"] isEqualString:@"YES"]) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    return cell; 
} 

使用這些信息此外,除非有很好的理由保存狀態@"Yes"@"No"串,爲什麼不救他們如[NSNumber numberWithBool:YES][NSNumber numberWithBool:NO]?當您想要進行比較時,這將簡化您的邏輯,而不必一直使用isEqualToString:

例如

cell.accessoryType = ([[info objectForKey:@"emailSelected"] boolValue]) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;