2013-11-26 8 views
5

Ho una delle forme in cui l'utente è autorizzato a selezionare alcuni campi, Per gli articoli selezionati ho usato [cell setAccessoryType:UITableViewCellAccessoryCheckmark];, la logica che ho usato è, ho preso il vuotoMutableArray e al momento del metodo didSelectRowAtIndex delegato ho controllato se il select indexPath è presente in quel emptyMutableArray, Se il suo presente indica che l'elemento è già selezionato, allora rimuoverò indexPath da quelmotivoMutable vuoto, ma se indexPath non è presente in esso, aggiungo indexPath in quelMutableArray vuoto. Ok dopo di che ricarico lo stesso tableView e in quel momento nel metodo cellForRowAtIndexPath ho ancora una istruzione if per l'impostazione della cella AccessoryType dove controllo se indexPath è presente in emptyMutableArray se è lì ho impostato l'AccessoryType della cella su UITableViewCellAccessoryCheckmark altrimenti l'ho impostato su UITableViewCellAccessoryNone, Dopodiché, quando il problema si verifica quando l'utente proverà a modificare tale modulo, allora voglio mostrare gli elementi già selezionati e questo è il problema, voi tutti capirete il problema dal mio codice per quello .Come mostrare le UITableViewCells pre-verificate al momento della modifica del modulo.

Questo è il codice metodi cellForRowAtIndexPath delegato che decide quale cella dovrebbe avere il segno di spunta

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    cell.selectionStyle=UITableViewCellSelectionStyleNone; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
cell.textLabel.font=[UIFont fontWithName:@"verdana" size:13]; 
cell.backgroundColor=[UIColor clearColor]; 
else if (tableView==roleTableView) { 

     cell.textLabel.text = [roleAry objectAtIndex:indexPath.row]; 

     if([emptyMutableArray containsObject:indexPath]){ 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 

     } else { 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 
     } 
    } 
cell.textLabel.textColor = [UIColor darkGrayColor]; 
    return cell; 
} 

e questo è il metodo di didSelectRowAtIndexPath tableView dal quale l'utente decide quale elemento deve essere selezionata o deselezionata.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
else if (tableView==roleTableView){ 

     NSLog(@"IndexPath Obj:-%@",indexPath); 
     if([emptyMutableArray containsObject:indexPath]){ 
      [emptyMutableArray removeObject:indexPath]; 

      [roleMutableAry removeObject:[roleIdAry objectAtIndex:[roleAry indexOfObject:[NSString stringWithFormat:@"%@",[roleAry objectAtIndex:indexPath.row]]]]]; 
     } 
     else { 
      [emptyMutableArray addObject:indexPath]; 

      [roleMutableAry addObject:[roleIdAry objectAtIndex:[roleAry indexOfObject:[NSString stringWithFormat:@"%@",[roleAry objectAtIndex:indexPath.row]]]]]; 
     } 
     NSLog(@"roleMutableAry:%@",roleMutableAry); 

     if ([roleMutableAry count]==0) { 
      //[roleBtn setTitle:@"Select role" forState:UIControlStateNormal]; 
     } 
     [roleTableView reloadData]; 
     [self loadInvitees]; 
     [peoplesOfDiffRoleTableView reloadData]; 

    } 
} 

so che era tipico per me esprimere il problema esatto, ma una volta capito il codice spiegherò in cui il problema si verifica mentre mostra gli elementi (controllato) già selezionati seconda volta.

+0

Potrebbe essere che dovresti spiegare chiaramente cosa vuoi veramente? quale forma? ecc. Ho letto 2 volte ma non sono in grado di visualizzare il tuo problema. Penso che dovresti aggiungere l'oggetto da "roleAry" o "roleIdAry" corrispondente a una cella in "emptyMutableAry". Dopodiché puoi facilmente confrontare il valore del titolo della cella con quello nel tuo "emptyMutableAry". –

risposta

0

Non è possibile dipendere da IndexPath per l'impostazione di alcune proprietà della cella poiché le celle vengono riutilizzate. Quello che ho capito dalla tua domanda è che vuoi tenere traccia della cella che è stata selezionata e successivamente vuoi che la vista tabella mostri di conseguenza il tipo di accessorio. Per questo dovresti avere un array che conterrà oggetti che avranno una proprietà come "isSelected" o qualsiasi cosa tu voglia. Questa proprietà ti aiuterà nell'impostazione del tipo di accessorio in base al suo valore. Nel tuo cellForRowAtIndex devi recuperare l'oggetto corrispondente dall'array e controllare la proprietà "isSelected" o qualsiasi cosa tu definisca e di conseguenza impostare il tipo di accessorio della cella. Spero che questo ti possa aiutare. Saluti!

Problemi correlati