2013-07-16 2 views
0

я проверить в didSelectRow метод, но, как я двигаюсь вверх таблицу, она удаляет проверку я думаю, что его создание новой ячейкиUITableViewCellAccessoryCheckmark удаляется при перемещении UITableView?

Как я могу использовать уникальную клетку так, чтобы она не будет заменить проверенную ячейку бесконтрольно.

- (void)tableAlert:(SBTableAlert *)tableAlert didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSLog(@"MY INDEX PATH IS %@", indexPath); 

    NSString *email = [allEmails objectAtIndex:indexPath.row]; 

    if (tableAlert.type == SBTableAlertTypeMultipleSelct) { 

     UITableViewCell *cell = [tableAlert.tableView cellForRowAtIndexPath:indexPath]; 

     if (cell.accessoryType == UITableViewCellAccessoryNone){ 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
      [selectedEmail addObject:email]; 
     } 

     else{ 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 
      [selectedEmail removeObject:email]; 

     } 

     [tableAlert.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

    NSLog(@"Final Array is %@", selectedEmail); 
} 


- (UITableViewCell *)tableAlert:(SBTableAlert *)tableAlert cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
UITableViewCell *cell; 

    // NSString *identifier = [NSString stringWithFormat:@"%d%d", indexPath.section, indexPath.row]; 


if (tableAlert.view.tag == 0 || tableAlert.view.tag == 1) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
} else { 
    // Note: SBTableAlertCell 
    cell = [[SBTableAlertCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
} 

//[cell.textLabel setText:[NSString stringWithFormat:@"Cell %d", indexPath.section]]; 

NSString *email = [allEmails objectAtIndex:indexPath.row]; 

cell.textLabel.text = [NSString stringWithFormat:@"%@", email]; 


UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 14.0 ]; 
cell.textLabel.font = myFont; 

return cell; 
} 

ответ

0

Поскольку вы уже хранят выбранные письма в selectedEmail массива, вы можете использовать его в cellForRowAtIndexPath метод для отображения галочки:

NSString *email = [allEmails objectAtIndex:indexPath.row]; 
cell.textLabel.text = [NSString stringWithFormat:@"%@", email]; 
if ([selectedEmail indexOfObject:email] != NSNotFound) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
} 

Таким образом, даже если ячейка повторно используется, проблем не будет.