Как изменить фокус в повторно используемой ячейке табличного представления с вложенным представлением коллекции в tvOS? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть табличное представление с вложенной коллекцией (горизонтальная прокрутка) в ячейку табличного представления. Примерно так:

-table view: 
  - section
   - cell: 
    - collection view

На стартовом экране у меня есть 3 раздела с 1 ячейкой в ​​каждом разделе. Когда я пытаюсь повторно использовать 1 секцию с ячейкой, indexPath для выделенного элемента не изменяется.

Например, если я выберу 1 секцию 1 ячейку и выделю 12th элемент в представлении коллекции, затем я прокручиваю табличное представление таким образом, я изменяю выделенный элемент и переключаюсь в другой раздел табличного представления. Таким образом, я повторно использую ячейку и вижу тот же самый сфокусированный indexPath ( 12 строка ). Итак, просмотр коллекции прокручивает к этому элементу.

Я пытался сбросить предпочитаемый FocusEnvironments в

весело переопределить c prepareForReuse ()

, но он не дал результата. И когда я установил в false collectionView.remembersLastFocusedIndexPath = false, это не помогло мне решить проблему. Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 18 февраля 2020

Я обнаружил, что проблема была в contentOffset в collectionView . Когда я повторно использовал tableViewCell, я не сбрасывал смещение в collectionView. Поэтому я сохранил все смещения для каждого collectionView в tableViewCell и установил это значение по ключу collectionView. Примерно так (в func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)):

return tableView.dequeueReusableCell(cellClass: HomeTableViewCell.self, for: indexPath).adjust {

    if let id = $0.feedID {
      contentOffsets[id] = $0.collectionView.contentOffset
    }
    $0.preprareForDisplay(feed: feeds[indexPath.section)
    $0.collectionView.contentOffset = contentOffsets[feeds[indexPath.section].origin.id] ?? .zero
  }

Так что после этого фокус работает правильно.

...