Обнаружить UITableViewCells, которые появляются на экране - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно сделать запрос, когда пользователь увидел UITableViewCell, я использовал func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath), но этот вызов метода для каждого UITableViewCell, до его отображения, но мне нужен делегат, когда UITableViewCell появился на экране.

1 Ответ

1 голос
/ 25 апреля 2020

Что вам нужно сделать, это определить, когда происходит прокрутка, с помощью метода делегата scrollViewDidScroll(_:). Когда вызывается метод делегата, вы можете определить, какие ячейки видны, проверив свойство tableView.indexPathsForVisibleRows. Обратите внимание, что это свойство возвращает IndexPath для всех ячеек, которые являются полностью видимыми и частично видимыми.

Предполагая, что вас интересуют только полностью видимые ячейки, вы можете проверить рамку для каждой строки, чтобы определить, на самом деле он полностью виден.

Чтобы определить, какие ячейки являются вновь видимыми, необходимо отследить ячейки, которые были видны ранее, и сравнить два набора.

Этот код сообщит вам как только появится ячейка:

var previousVisiblePaths = Set<IndexPath>()

override func scrollViewDidScroll(_ scrollView: UIScrollView) {

    guard let visiblePaths = tableView.indexPathsForVisibleRows?.filter ({
        let rect = tableView.rectForRow(at: $0)
        return tableView.bounds.contains(rect)
    }).reduce(into: Set<IndexPath>(), { result, indexPath in
        result.insert(indexPath)
    }) else { return }

    let newVisiblePaths = visiblePaths.subtracting(previousVisiblePaths)

    if newVisiblePaths.count > 0 {
        print("Just displayed: \(newVisiblePaths)")
    }

    previousVisiblePaths = visiblePaths
}
...