2011-04-21 5 views
0

Je voudrais obtenir un TableView avec différents éléments sur l'accessoireView, selon la section. Tout fonctionne bien, mais quand je descends à la section 2 et que je redescends à la section 0, les lignes de la section 0 ont des commutateurs. Pourriez-vous s'il vous plaît m'aider à découvrir ce que je fais mal? Iphone - cellForRowAtIndexPath se comporte bizarrement en faisant défiler vers le bas et vers le haut

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSInteger sectionIndex = [indexPath section]; 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
NSDictionary *dictionary; 
NSArray *array; 
NSString *cellValue; 
UISwitch *switchView; 

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

switch (sectionIndex) { 
    case 0: 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     break; 
    case 1: 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     break; 
    case 2: 
     switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
     cell.accessoryView = switchView; 
     [switchView setOn:NO animated:NO]; 
     [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
     [switchView release]; 
     break; 
    default: 
     break; 
} 

dictionary = [searchArray objectAtIndex:indexPath.section]; 
array = [dictionary objectForKey:@"advancedSearch"]; 
cellValue = [array objectAtIndex:indexPath.row]; 
cell.textLabel.text = cellValue; 

return cell; 

}

Répondre

0

Vous supprimez les cellules de votre tableau (voir -[UITableView dequeueReusableCellWithIdentifier:]), ce qui signifie que vous recevez des vues de table déjà allouées et éventuellement pré-remplies avec des données périmées. Dans case 0: et case 1: de votre instruction switch, vous devez ajouter la ligne suivante:

cell.accessoryView = nil; 
+0

Cela a résolu mon problème, merci! – Adriana

0

Utilisez différents identifiants de cellules pour différentes cellules. Quelque chose comme:

NSString *CellIdentifier; 
switch ([indexPath row]) { 
    case 0: CellIdentifier = @"cell0"; 
      break; 
    case 1: CellIdentifier = @"cell1"; 
      break; 
    default: CellIdentifier = @"cell"; 
      break; 
} 

Sinon Xcode pense que toutes vos cellules ont le même aspect et tente de les réutiliser tout en faisant défiler.

0

Le problème est de dequeueReusableCellWithIdentifier vous devez utiliser différents identifiants pour différentes cellules parce que vous les réutiliser.

Questions connexes