Po prostu chcę, aby komórka podświetliła się na krótko UIColor lub obrazem tła przed animacją z powrotem do stanu niezaznaczonego, gdy użytkownik dotknie komórki. Zaznaczam komórkę gwiazdką, aby pokazać, że została wybrana, ale chciałabym, aby cała komórka podświetliła się na chwilę tylko po to, by pokazać zaznaczenie.Czy istnieje sposób animowania obiektu UITableViewCell, aby wiersz migał krótko na wybranym stanie, a następnie z powrotem na biały w zaznaczeniu?
Odpowiedz
dodać tę linię w didSelectRowAtIndexPath -
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Jeśli chcesz mieć większą kontrolę nad tym, co kulminacyjnym wygląda, można użyć „podświetlony” własność etykiecie komórki i ustawić selectedBackgroundView. Zarówno krótko będzie migać i wyłącza, gdy wybrany
// text color
[[cell textLabel] setTextColor:[UIColor blackColor]];
[[cell textLabel] setHighlightedTextColor:[UIColor whiteColor]];
// background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell-background.png"]];
[cell setBackgroundView:backgroundView];
[backgroundView release];
UIImageView *selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell-background-highlighted.png"]];
[cell setSelectedBackgroundView:selectedBackgroundView];
[selectedBackgroundView release];
Myślę, że odpowiedź jest stałe pod warunkiem, jeśli chcesz animować tylko jeden wiersz w odpowiedzi na selekcję.
Szukałem sposobu, aby to zrobić z wieloma wierszami jednocześnie i bez zaznaczania i odznaczania wierszy w odpowiedzi na dotyk. Zrobiłem, co następuje:
Stworzył metodę w moim UITableViewController nazwie „calloutCells”:
- (void)calloutCells:(NSArray*)indexPaths
{
[UIView animateWithDuration:0.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^void() {
for (NSIndexPath* indexPath in indexPaths)
{
[[self.tableView cellForRowAtIndexPath:indexPath] setHighlighted:YES animated:YES];
}
}
completion:^(BOOL finished) {
for (NSIndexPath* indexPath in indexPaths)
{
[[self.tableView cellForRowAtIndexPath:indexPath] setHighlighted:NO animated:YES];
}
}];
}
Należy pamiętać, że czas trwania i opóźnienie nie zmieniają animację wybrałem ponieważ używam wbudowanego w animacji na setHighlighted.
Kiedy chcę zainicjować podświetlenie/usuwa zaznaczenie animacji z UITableViewController, mogę jednocześnie zaznaczyć wiersze 3 i 4 sekcji 0 takiego:
[self calloutCells:[NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:3 inSection:0],
[NSIndexPath indexPathForRow:4 inSection:0], nil]];
Nadzieja to pomaga kogoś innego! Wersja
swift3:
func calloutCell(indexPath: IndexPath) {
UIView.animate(withDuration: 0,
delay: 0,
options: .allowUserInteraction,
animations: {
let cell = self.tableView.cellForRow(at: indexPath)
cell?.setHighlighted(true, animated: true)
}) { (f: Bool) in
let cell = self.tableView.cellForRow(at: indexPath)
cell?.setHighlighted(false, animated: true)
}
}
Wewnątrz komórek:
self.selectionStyle = .blue
let uiview = UIView(frame: CGRect(x: 0, y: 0, width: 209, height: 251))
uiview.backgroundColor = UIColor.red
self.selectedBackgroundView = uiview
takie proste! Dzięki, czy znasz sposób kontrolowania czasu trwania animacji? – Nathan
Nie sądzę, że jest to możliwe dzięki tej metodzie. możesz to zrobić za pomocą niestandardowej animacji komórki. – shannoga
Jeśli chcesz kontrolować animację, ponieważ trwa to zbyt długo, możesz polubić, jak szybko miga, gdy ustawisz animację na false/NO – Rob