Я новичок в tvOS. Я хотел бы иметь стандартную кнопку, которая при однократном нажатии перемещает фокус на другую стандартную кнопку, как мне это сделать (если это возможно, конечно)?
Как переместить фокус с кнопки на другую в tvOS?
Ответы (2)
Начните с переопределения preferredFocusedView
в вашем viewController с помощью пользовательского свойства:
var myPreferredFocusedView:UIView?
override var preferredFocusedView: UIView? {
return myPreferredFocusedView:UIView
}
Затем в обратном вызове кнопки установите myPreferredFocusedView
на следующую предпочтительную кнопку, которая должна получить фокус. После этого напрямую запросите обновление фокуса:
func buttonCallback(){
myPreferredFocusedView = button2 // button2 is an example
/*
Trigger the focus system to re-query the view hierarchy for preferred
focused views.
*/
setNeedsFocusUpdate()
updateFocusIfNeeded()
}
Это должно обновить систему фокусировки на другую кнопку.
person
Antoine
schedule
13.10.2015
Большое спасибо, Антуан. Он работает нормально, единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что при выходе из представления и затем возвращении фокус теряется, и мне нужно использовать клавиши со стрелками (или перетаскивать на пульте дистанционного управления), чтобы получить любую кнопку для фокусировки. Я постараюсь изучить больше об этом...
- person Cue; 14.10.2015
Вы можете использовать тот же код. Просто убедитесь, что вы установили
preferredFocusedView
и запросили обновление фокуса в viewWillAppear.
- person Antoine; 14.10.2015
@Antoine Можете ли вы дать мне идею, чтобы автоматически переместить вкладку фокуса на AVPlayerViewController через 10 секунд программно в tvOS.
- person Vipulk617; 04.02.2016
Я попытался переместить вкладку фокуса в AVPlayerViewController, чтобы переопределить метод selectedFocusedView, но не могу перемещаться программно.
- person Vipulk617; 04.02.2016
Другой вариант — сделать что-то вроде следующего, когда кнопка A (например) имеет фокус:
buttonB.setNeedsFocusUpdate()
viewController.setNeedsFocusUpdate()
Однако это работает только в том случае, если они находятся на одном уровне в иерархии представлений. Если нет, то вам, вероятно, нужно связать вызовы setNeedsFocusUpdate
на всем пути вверх по иерархии или что-то в этом роде...
person
CMash
schedule
27.02.2018