使UITableViewCell选择闪烁

时间:2014-04-10 14:16:40

标签: ios objective-c uitableview

我希望UITableViewCell突出显示灰色,然后在用户触摸UITableViewCell后返回白色。

我可以让它变成灰色但它会一直保持灰色,直到用户选择另一个单元格...

这是我的代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;

 }

5 个答案:

答案 0 :(得分:4)

要取消选择,您可以添加此

[self.tableView deselectRowAtIndexPath:indexPath animated:YES];

in

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

修改1

尝试将其更改为

double delayInSeconds = 0.8;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [tableView deselectRowAtIndexPath:indexPath animated:YES];

});

答案 1 :(得分:0)

您可以对UITableViewCell进行子类化并覆盖- (void)setSelected:(BOOL)selected animated:(BOOL)animated方法,以便执行所需的行为。 例如,您可以更改单元格背景的颜色,然后在0.5秒后触发计时器以将其转换为原始背景。

答案 2 :(得分:0)

[增订]

Swift 3

        let delayInSeconds = 0.7;
    DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds * 1) {
        tableView.deselectRow(at: indexPath, animated: true)
    }

答案 3 :(得分:0)

感谢Meseery,我的版本(Swift 5)变成了:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
            tableView.deselectRow(at: indexPath, animated: true)
        }
    }

答案 4 :(得分:0)

Swift 5:

在继承自 UITableViewCell 的自定义单元格上覆盖此方法,在它里面你可以做任何你需要做的事情。在这种情况下,如果选中,我会将自定义视图 containerView 更改为灰色,并立即将其动画恢复为白色。

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    guard selected else { return }
    containerView.backgroundColor = .systemGray6
    UIView.animate(withDuration: 0.5) { [weak self] in
        self?.containerView.backgroundColor = .white
    }
}