2016-11-25 10 views
0

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

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

+0

Что вы подразумеваете под фокусом? – Lion

+0

Фокус означает в приложении tv os, когда фокус перемещается, тогда вы можете нажать на кнопку. –

+0

Лучше вы можете использовать взаимодействие ячейки просмотра коллекции. –

ответ

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 
} 

вы можете увидеть больше по этой ссылке: enter link description here.

+0

он не работает, как ожидалось, сначала он сфокусировал первую кнопку, затем вторую кнопку, а затем, наконец, ячейку ... Это неверно UX. – mgyky

1

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

Он дает хорошее объяснение того, как двигатель фокусировки решит, какой объект должен получить следующий фокус. Ниже большой шаг объяснение шагом на above link.

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

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

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

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

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