防止 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 出队并重新加载

使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?

带有平移手势识别器的UICollectionViewCell

防止多个可平移的表格视图单元格被平移