在Swift中设置动画的UITableViewCell高亮颜色

时间:2018-10-21 10:14:01

标签: ios swift uitableview uikit

默认情况下,UITableViewCell的突出显示效果如下:

Default highlight effect

我正在寻找一种类似的效果,即自定义颜色(例如UIColor默认红色值)代替了灰色。我尝试使用setHighlighted委托自己实现此功能,但它不会产生默认样式的动画效果。

这是我使用的代码,并且实现了不希望的效果:

override func setHighlighted(_ highlighted: Bool, animated: Bool) {
  super.setHighlighted(highlighted, animated: animated)

  if highlighted {
    self.backgroundColor = .red
  }
}

cell.selectionStyle = .none中的cellForRowAt旁边设置。

Undesired highlight effect

有什么方法可以产生类似本机的动画自定义突出显示颜色?

2 个答案:

答案 0 :(得分:1)

您需要为“ if”条件添加另一个条件“ else”,并将红色背景色清除为正常。

  if highlighted {
    self.backgroundColor = .red
  }else { 
    self.backgroundColor = .white
  }

答案 1 :(得分:0)

(已编辑) 您可以使用手势来模拟本地用户的行为,如下所示:

  let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")
yourCell.view.addGestureRecognizer(longPressRecognizer)

  func longPressed(sender: UILongPressGestureRecognizer)
   {
        if sender.state == .began {
            yourCell.animate(withDuration: 0.2, delay:0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEeaseOut, animations: { yourCell.backgroundColor = .red })

        }
        if sender.state == .ended {
            yourCell.animate(withDuration: 0.2, delay:0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEeaseOut, animations: { yourCell.backgroundColor = .white })
        }
   }