有没有一种动画UITableViewCell的方法,以便该行短暂闪烁到选定状态,然后在选择时返回白色?

时间:2011-02-07 21:17:23

标签: iphone ios animation uitableview

我只是希望单元格用UIColor或背景图像短暂突出显示,然后在用户点击单元格时动画回到未选择状态。我用星号标记单元格以显示它已被选中,但希望整个单元格能够短暂突出以显示选择。

4 个答案:

答案 0 :(得分:14)

在didSelectRowAtIndexPath -

中添加此行
[tableView deselectRowAtIndexPath:indexPath animated:YES];

答案 1 :(得分:14)

我认为如果您想要响应选择而只为一行设置动画,则所提供的答案是可靠的。

我正在寻找一种方法,可以同时执行多行,而无需选择和取消选择响应触摸的行。我做了以下事情:

在我的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启动高亮/不高亮动画时,我可以同时突出显示第0部分的第3行和第4行,如下所示:

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

希望这有助于其他人!

答案 2 :(得分:0)

如果您想要更好地控制突出显示的内容,可以使用单元格标签的“突出显示”属性并设置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];

答案 3 :(得分:0)

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

内部CEll:

self.selectionStyle = .blue
let uiview = UIView(frame: CGRect(x: 0, y: 0, width: 209, height: 251))
uiview.backgroundColor = UIColor.red
self.selectedBackgroundView = uiview