防止 UITableViewCells 在平移时突出显示
Posted
技术标签:
【中文标题】防止 UITableViewCells 在平移时突出显示【英文标题】:Prevent UITableViewCells from highlighting when panning 【发布时间】:2019-06-07 13:28:03 【问题描述】:我正在使用包含 ContainerView 的 UIViewController。在 ContainerView 里面我有一个 UITableViewController。我的 UIViewController 中有一个 PanGestureRecognizer 用于将其关闭。现在我遇到的问题是,当我平移关闭 UIViewController 时,被触摸的 UITableViewController 内的 TableViewCells 会短暂突出显示。
我已在我的表格视图中禁用滚动,因为我不需要它。
我将此添加到我的平移手势处理程序的.began
,但它没有任何效果:
myTableView.isUserInteractionEnabled = false
我也试过了:
myGestureRecognizer.cancelsTouchesInView = true
但触摸仍然传递给 TableView 并导致单元格突出显示。有什么解决办法吗?
【问题讨论】:
您是否尝试禁用单元格用户交互? 你的单元格可以点击吗? 【参考方案1】:我最终使用了这个:
myGestureRecognizer.delaysTouchesBegan = true
它可能不是在所有情况下都有用,但对于我的 TableView 来说,它可以防止高亮显示。
【讨论】:
【参考方案2】:您可以尝试立即取消选择在didSelectRow
的委托方法中选择的行。
extension MyViewController: UITableViewDelegate
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
将防止选中时突出显示单元格。根据我的经验,这是比较常见的做法。
编辑:我的错误,误读了问题。在这种情况下,您可以考虑使用 tableView 的 scrollView 委托来确定您何时滚动,并像这样在单个单元格上禁用交互:
class ViewController: UIViewController
private var areCellsDisabled = false
didSet
tableView.reloadData()
// Rest of your view controller logic here...
extension ViewController: UITableViewDelegate
func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
areCellsDisabled = true
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
areCellsDisabled = false
extension ViewController: UITableViewDataSource
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// Configure/dequeue the cell, etc.
if areCellsDisabled
cell.isUserInteractionEnabled = false
else
cell.isUserInteractionEnabled = true
return cell
不过,这可能会对问题产生影响。如果有帮助,请告诉我。
【讨论】:
谢谢,但我已经在使用这种方法了。它只会防止单元格被永久突出显示。这对我要问的问题没有帮助。 在上面添加了一个替代方案供您尝试。不确定它是否能满足您的需求,但值得尝试! 编辑:我的错,看起来你解决了这个问题。以上是关于防止 UITableViewCells 在平移时突出显示的主要内容,如果未能解决你的问题,请参考以下文章
如何防止自定义 UITableViewCells 在取消选择时闪烁白色?
Swift:如何防止未显示的 UITableViewCells 在滚动时被关闭
使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?