Как переместить фокус на кнопку в ячейке collectionview в приложении tvos?
Я работаю над приложением Apple TV. В моем приложении я сделал экран, который имеет представление коллекции. В этом случае я могу переместить фокус в ячейку представления коллекции, но не могу переместить фокус на кнопку, которая находится в ячейке представления коллекции, так что кто-нибудь может помочь мне решить эту проблему?
Пожалуйста, дайте мне ответ, если кто-нибудь знает этот ответ.
2 ответа
Я могу решить эту проблему, добавив ниже методы в подклассе collectionViewCell.
В подклассе CollectionViewCell
override var preferredFocusEnvironments: [UIFocusEnvironment]{
// Condition
}
override func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool {
// Condition
}
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
// Condition
}
Вы можете увидеть больше по этой ссылке: введите описание ссылки здесь.
Я думаю, что эта страница поможет вам достичь того, чего вы хотите. https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/WorkingwiththeAppleTVRemote.html
Это дает хорошее объяснение того, как движок фокуса решит, какой объект должен получить следующий фокус. Ниже приведено большое объяснение шаг за шагом по ссылке выше.
Вот пример, показывающий, как фокус может быть определен:
- Механизм фокуса запрашивает у корневого окна свой предпочтительный объект FocusedView, который возвращает объект привилегированного объекта-контроллера своего корневого представления.
- Корневой контроллер представления, контроллер представления с вкладками, возвращает объект его предпочтительного контроллера представления viewFocusedView.
- Контроллер выбора представления переопределяет свой метод предпочитаемый объект Focus для возврата определенного экземпляра UIButton.
- Экземпляр UIButton возвращает self(по умолчанию) и является фокусируемым, поэтому он выбирается механизмом фокусировки в качестве следующего сфокусированного представления.
Вы должны переопределить свойство favourFoucsedView вашего UIView или UIViewController.
override weak var preferredFocusedView: UIView? {
if someCondition {
return theViewYouWant
} else {
return defaultView
}
}
Благодаря ответу Слейтера