CollectionView не фокусирует правильную ячейку - PullRequest
0 голосов
/ 27 мая 2020

У меня есть collectionView и tableView в моем ViewController (tableView слева и collectionView справа), и если я нажму на элемент, будет представлено другое представление. Когда это представление отклоняется, я хочу, чтобы мой collectionView был сфокусирован и был выбран последний элемент, для этого я указываю в preferredFocusEnvironments , что [collectionView] является предпочтительным, в противном случае фокус был сосредоточен на tableView. Я покажу вам небольшую часть моего кода с той, которая не работает.

Это мой координатор, где я отклоняю представленное представление:

 func didCloseContent(sender: CollectionTVCoordinator) {
        self.menuViewController?.didShowDetails = true
        self.removeChildCoordinator(sender)
 }

Это мой ViewController, который содержит как tableview, так и collectionview:

 final class ViewController: UIViewController {
     @IBOutlet var tableView: UITableView!
     @IBOutlet var collectionView: UICollectionView!

     var didShowDetails = false
     var shouldFocusOnMainView = false

 override func viewWillAppear(_: Bool) {
        super.viewWillAppear(true)

        if self.didShowDetails {
            self.shouldFocusOnMainView = true
        }
    }

 override var preferredFocusEnvironments: [UIFocusEnvironment] {
    if self.shouldFocusOnMainView {
        self.shouldFocusOnMainView = false
        return [self.collectionView]
    } else {
        return [self.tableView]
    }
}
}

Так выглядит мое представление

Все работает хорошо, после того, как представление закрывается, фокусируется последняя ячейка в фокусе, пока я не коснусь элементов, окрашенных зеленым. Если я нажал на зеленые элементы, когда представление будет закрыто, фокус больше не будет на этой зеленой ячейке, находится на первой ячейке сверху слева. Также я установил self.collectionView.remembersLastIndexPath = true .

Я не уверен, почему это происходит, и я должен упомянуть, что это происходит не все время, но происходит часто .

...