Как переместить фокус на кнопку в ячейке collectionview в приложении tvos?

Я работаю над приложением Apple TV. В моем приложении я сделал экран с представлением коллекции. В этом случае я могу переместить фокус на ячейку просмотра коллекции, но не могу переместить фокус на кнопку, которая находится в ячейке просмотра коллекции, поэтому может ли кто-нибудь помочь мне решить эту проблему?

пожалуйста, дайте мне ответ, если кто-нибудь знает этот ответ.


person vikas prajapati    schedule 25.11.2016    source источник
comment
что вы имеете в виду под фокусом?   -  person Ketan Parmar    schedule 25.11.2016
comment
Фокус означает, что в приложении tv os всякий раз, когда фокус перемещается, вы можете нажать кнопку вверх.   -  person vikas prajapati    schedule 25.11.2016
comment
Лучше вы можете использовать взаимодействие с ячейкой представления коллекции.   -  person Karthick Selvaraj    schedule 25.11.2016
comment
@Kartick да, я могу взаимодействовать с ячейкой представления коллекции, но в моем приложении кнопки находятся в collectionViewCell, так как мне их щелкнуть?   -  person vikas prajapati    schedule 25.11.2016
comment
Какие элементы у вас есть в ячейке представления коллекции?   -  person Karthick Selvaraj    schedule 25.11.2016
comment
@Karthick две кнопки, две метки и одно представление изображения находятся в ячейке представления коллекции.   -  person vikas prajapati    schedule 25.11.2016
comment
вам нужно в объекте UIFocusGuide в viewDidload, который позволит пользователю перемещать фокус соответственно   -  person sschunara    schedule 25.11.2016


Ответы (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
}

вы можете увидеть больше по этой ссылке: введите здесь описание ссылки.

person vikas prajapati    schedule 20.12.2016
comment
он не работает, как ожидалось, сначала он сфокусировал первую кнопку, затем вторую кнопку и, наконец, ячейку... Это неправильный UX. - person mgyky; 16.02.2018

Я думаю, что эта страница поможет вам достичь того, чего вы хотите. https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/WorkingwiththeAppleTVRemote.html#//apple_ref/doc/uid/TP40015241-CH5-SW4

Это дает хорошее объяснение того, как механизм фокусировки будет решать, какой объект должен получить следующий фокус. Ниже приведено подробное пошаговое объяснение по ссылке выше.< /а>

Вот пример, показывающий, как можно определить фокус:

  1. Механизм фокуса запрашивает у корневого окна его предпочтительныйFocusedView, который возвращает объект PreferredFocusedView своего корневого контроллера представления.
  2. Контроллер корневого представления, контроллер представления вкладок, возвращает объект selectedFocusedView контроллера выбранного представления.
  3. Контроллер выбора представления переопределяет свой метод selectedFocusedView, чтобы вернуть конкретный экземпляр UIButton.
  4. Экземпляр UIButton возвращает self (по умолчанию) и может быть сфокусирован, поэтому он выбирается механизмом фокуса в качестве следующего сфокусированного представления.

Вы должны переопределить свойство selectedFoucsedView вашего UIView или UIViewController.

override weak var preferredFocusedView: UIView? {
    if someCondition {
        return theViewYouWant
    } else {
        return defaultView
    }
}

Благодаря Slayter ответь

person sschunara    schedule 29.11.2016