У меня есть 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 .
Я не уверен, почему это происходит, и я должен упомянуть, что это происходит не все время, но происходит часто .