Есть ли способ анимировать UITableViewCell, чтобы строка кратковременно мигала до выбранного состояния, а затем возвращалась к белому при выборе? - PullRequest
7 голосов
/ 08 февраля 2011

Я просто хочу, чтобы ячейка кратко подсвечивалась либо UIColor, либо фоновым изображением, прежде чем анимировать обратно в невыбранное состояние, когда пользователь касается ячейки.Я помечаю ячейку звездочкой, чтобы показать, что она была выделена, но хотела бы, чтобы вся ячейка кратко подсвечивалась, чтобы показать выделение.

Ответы [ 4 ]

14 голосов
/ 06 сентября 2012

Я думаю, что предоставленный ответ будет точным, если вы хотите анимировать только одну строку в ответ на выбор.

Я искал способ сделать это с несколькими строками одновременно, без выбора и отмены выбора строк в ответ на касание. Я сделал следующее:

Создал метод в моем UITableViewController с именем "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];
                         }
                      }];
}

Обратите внимание, что длительность и задержка не изменяют выбранную мной анимацию, поскольку я использую встроенную анимацию в setHighlighted.

Когда я хочу запустить анимацию выделения / отмены выделения из UITableViewController, я могу одновременно выделить строки 3 и 4 раздела 0 следующим образом:

[self calloutCells:[NSArray arrayWithObjects:
                     [NSIndexPath indexPathForRow:3 inSection:0], 
                     [NSIndexPath indexPathForRow:4 inSection:0], nil]];

Надеюсь, это поможет кому-то еще!

14 голосов
/ 08 февраля 2011

добавить эту строку в didSelectRowAtIndexPath -

[tableView deselectRowAtIndexPath:indexPath animated:YES];
0 голосов
/ 10 ноября 2017

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)
        }
    }

Внутри клетки:

self.selectionStyle = .blue
let uiview = UIView(frame: CGRect(x: 0, y: 0, width: 209, height: 251))
uiview.backgroundColor = UIColor.red
self.selectedBackgroundView = uiview
0 голосов
/ 23 февраля 2011

Если вы хотите больше контроля над тем, как выглядит выделение, вы можете использовать свойство «подсвеченный» метки ячейки и установить selectedBackgroundView. Оба будут кратковременно мигать, когда выбрано

// 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...