2011-07-05 41 views
0

我需要爲我的UITableView保存選定的項目在NSMutableDictionary爲實現複選框。所以我做了以下幾點:UITableView保存選定的項目

NSMutableDictionary * selDict;// - instance variable 

    ... 
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

     if ([selDict objectForKey:indexPath]) 
      [selDict setObject:[NSNumber numberWithBool:FALSE] forKey:indexPath]; 
     else 
      [selDict setObject:[NSNumber numberWithBool:TRUE] forKey:indexPath]; 

     [[self tableView]reloadData]; 

    } 

    - (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]; 
      [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
     } 

     if ([selDict objectForKey:indexPath]) 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     else 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     ... 

     return cell; 
    } 

但它只是設置項目檢查,並沒有進一步工作。

+0

你的意思是什麼不能進一步工作?你也應該更好地使用'[[self tableView] reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]'而不是'[[self tableView] reloadData]'(無需重新加載整個表) –

+0

感謝您的提示。它也適用於我。 –

回答

2

您可能需要更改

if ([selDict objectForKey:indexPath]) 

if ([[selDict objectForKey:indexPath] boolValue]) 

你現在正在做的是檢查對象是否存在。它會在nil之後工作一次,但之後不會。