2010-08-11 7 views
0

J'ai un selectedArray défini comme une propriété dans mon fichier qui contient les cellules qui ont été "vérifiées". Lors de l'affichage de la cellule, je vérifie si la valeur de la cellule courante est dans le tableau selectedArray, et si c'est le cas, j'affiche le UITableViewCellAccessoryCheckmark en tant qu'Accessoire de la table. Le seul problème est que lorsque l'utilisateur recherche via UITableView à l'aide de UISearchBar, je demande à la table de reloadData une fois la recherche terminée, et dans la méthode numberofRows, je vois la bonne quantité d'objets dans le tableau selectedArray. Toutefois, la méthode cellForRowatIndexPath affiche toujours les anciennes coches comme si le tableau selectedArray n'avait jamais été mis à jour.UITableView ne rafraîchit pas correctement

Quelqu'un peut-il m'aider s'il vous plaît? Voici mon code -

NSArray *tempArray = [[NSArray alloc] init]; 
if(tableView == theTable) { 
    tempArray = [contactsArray objectAtIndex:indexPath.row]; 
} else { 
    tempArray = [searchfor_array objectAtIndex:indexPath.row]; 
} 

NSString *cellValue = [tempArray objectAtIndex:0]; 
static NSString *CellIdentifier; 
CellIdentifier = cellValue; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

    UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(70, 30, 200, 20)]; 
    name.text = [tempArray objectAtIndex:0]; 
    name.backgroundColor = [UIColor clearColor]; 
    [name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]]; 
    [cell.contentView addSubview:name]; 
    [name release]; 

    if([selectedArray containsObject:[tempArray objectAtIndex:0]]) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

} 

return cell; 
[cell release]; 
[tempArray release]; 
[cellValue release]; 

Répondre

0

Ajouter à la réponse de Justin -

Vous devriez ajouterez l'étiquette dans le cas (cellule == néant) partie seulement. Vous gérez la vue accessoire à l'extérieur de cette déclaration. Voici ce qu'il devrait ressembler -

if (cell == nil) { 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

    UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(70, 30, 200, 20)]; 
    name.text = [tempArray objectAtIndex:0]; 
    name.backgroundColor = [UIColor clearColor]; 
    [name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]]; 
    [cell.contentView addSubview:name]; 
    [name release]; 


} 

if([selectedArray containsObject:[tempArray objectAtIndex:0]]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} else { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+0

Merci d'avoir comblé les lacunes dans ma réponse. – Justin

1

Il semble que vous configuriez la cellule une seule fois et la réutilisiez. Parcourez le code et vous devriez voir que le bloc if est entré seulement la première fois que la cellule est chargée.

Vous souhaitez régler la cellule pour chaque ligne, comme ceci:

if (cell == nil) { 
    // Initialize cell. 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Adjust cell for each row. 
if([selectedArray containsObject:[tempArray objectAtIndex:0]]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
+0

Quand je fais cela cependant, il ne résout pas le problème et les étiquettes commencent empiler sur un autre ... –

+0

Je ne l'ai pas en détail comment configurer la cellule et manqué un autre pour effacer la vue accessoire. Raphaël l'a couvert. – Justin

Questions connexes