2011-01-28 12 views
8

Ho riscontrato un problema durante l'implementazione di uno UITableView in un'app iOS su cui sto lavorando (iOS SDK 4.2). Se tocchi una cella nella Vista tabella, quindi scorri la vista in modo che la cella lasci lo schermo, quando torna in vista la cella selezionata più di recente è stata riselezionata.UITableViewCell viene riselezionato quando si scorre sullo schermo

di testare questo ho creato un nuovo progetto di vista Based Application, trascinato fuori un UITableView in Interface Builder, e impostare il controller della vista come origine dati della vista tavolo e delegato, e inserire il seguente codice nel controller della vista:

- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section { 
    return 12; 
} 

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

    UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!aCell) { 
     aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease]; 
    } 

    aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1]; 

    return aCell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath]; 
    [aCell setSelected:NO animated:YES]; 
} 

Quando si esegue questo (nel simulatore o sul dispositivo) se dovessi toccare qualsiasi cella (cella 12 per esempio), sarebbe selezionato e deselezionato. Dopodiché, senza celle nella tabella attualmente selezionata, se si scorre la vista in modo che la cella selezionata più recentemente (12 in questo caso) lasci lo schermo, verrà nuovamente selezionata quando riappare.

È questo il comportamento predefinito previsto per UITableView? O forse un errore nella mia implementazione? Quale sarebbe il modo migliore per deselezionare questa cella in questa situazione?

risposta

13

mi c'è voluto chiedere a calcolare questo fuori me stesso:

Il mio problema stava usando il metodo setSelected:UITableViewCell invece di utilizzare il metodo di deselectRowAtIndexPath:UITableView.

+0

grazie! Ho avuto lo stesso problema. – Marky

+0

sei ancora in grado di riprodurre l'animazione dove lo seleziona per un breve momento e poi lo deseleziona subito dopo? – chourobin

+0

@ CR54 Sì, è ancora possibile ottenere che effetto di animazione come questo: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animato: YES]; } –

Problemi correlati