Ho un delegato della vista tabella che controlla se è possibile selezionare una cella specifica. In caso contrario, la selezione viene interrotta. Al fine di dare all'utente un feedback visivo voglio tingere un marchio di rosso questa cella e, dopo un breve lasso di tempo tingere Back to Black:Animazione in willSelectRowAtIndexPath dopo la convalida
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (true) { // Some simplification
MyTableViewCell cell = ... // The correct cell is loaded here
[UIView animateWithDuration:0.5 animations:^{
cellToSelect.labelAmount.textColor = [UIColor redColor];
} completion:^(BOOL finished) {
[UIView animateWithDuration:1.0 animations:^{
cellToSelect.labelAmount.textColor = [UIColor blackColor];
}];
}];
return nil;
}
return indexPath;
}
Le animazioni non vengono eseguite. Invece, la cellula è solo (visivamente) deselezionata.
EDIT: Ho appena provato le soluzioni proposte e nessuno dei due sembrava funzionare. Così ho scavato un po 'più e ho scoperto che posso fare animazioni, ma non sono in grado di cambiare il textColor di etichette all'interno di una cella:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell cell = ...
cell.labelAmount.textColor = [UIColor redColor];
// Now, although the property was set (as I can see in the debugger)
// the label is still drawn with standard black text.
}
Inoltre, impostando il colore tramite una stringa attribuito colorato non funziona .
D'altra parte, una modifica di highlightedTextColor
viene presentata di conseguenza. Quindi questo funziona.
Sei sicuro che la cella 'MyTableViewCell = ... // La cella corretta viene caricato here' caricare il cellulare qui? Il metodo 'cellForRowAtIndexPath' viene in genere utilizzato, ma non restituirà alcuna cella se quella cella non è visibile sullo schermo. – pteofil