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?
grazie! Ho avuto lo stesso problema. – Marky
sei ancora in grado di riprodurre l'animazione dove lo seleziona per un breve momento e poi lo deseleziona subito dopo? – chourobin
@ CR54 Sì, è ancora possibile ottenere che effetto di animazione come questo: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animato: YES]; } –