防止平移时突出显示UITableViewCells

时间:2019-06-07 13:28:03

标签: ios swift uitableview uipangesturerecognizer

我正在使用包含ContainerView的UIViewController。在ContainerView内部,我有一个UITableViewController。我的UIViewController中有一个PanGestureRecognizer,用于关闭它。现在的问题是,当我平移以关闭UIViewController时,被触摸的UITableViewController内部的TableViewCells会短暂突出显示。

由于不需要,我已禁止在表视图中滚动。

我将此添加到了平移手势处理程序的import Constants from 'expo-constants'; 中,但没有任何作用:

const { version } = Constants.manifest;

我也尝试过:

.began

,但是触摸仍然传递给TableView并导致单元格突出显示。有什么解决办法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试立即取消选择在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
    }

}

但是,这可能会给问题带来麻烦。让我知道是否有帮助。

答案 1 :(得分:0)

我最终使用了这个:

<html>
<head>
<style>
.hiddenfile {
   opacity: 0;
   visibility: hidden;
   display: none;
}
</style>
</head>
<body>
<div id="SOMETHING" class="SOMETHING hiddenfile" name="SOMETHING">...</div>
<div id="SOMETHING2" class="SOMETHING2 hiddenfile" name="SOMETHING2">...</div>
<div id="SOMETHING3" class="SOMETHING3 hiddenfile" name="SOMETHING3">...</div>
</body>
</html>

它不一定在每种情况下都有用,但是对于我的TableView来说,它可以防止突出显示发生。