Проблема фокуса на приложении tvOS при переходе от вида к другому - PullRequest
0 голосов
/ 01 октября 2019

Hy,

У меня есть вид на tvOS, который содержит два вида разных размеров. Когда я двигаюсь с левого вида, я хочу сфокусировать элементы с левого вида, но этого не происходит.

Вот как это выглядит: Вид

вид слева - это tableView и вид справа - это UIView с textField сверху. Я хочу, когда я перехожу из таблицы, чтобы сосредоточиться на textField. Но теперь этого не происходит.

Я создал focusGuide на mainController , который содержит те два представления, которые имеют те же привязки, что и mainController , и он не работает,Как это:

 private func setupFocusGuide(){
    self.sideFocusGuide = UIFocusGuide()
    view.addLayoutGuide(self.sideFocusGuide!)
    self.sideFocusGuide?.topAnchor.constraint(equalTo: self.mainView.topAnchor, constant: 0).isActive = true
    self.sideFocusGuide?.bottomAnchor.constraint(equalTo: self.mainView.bottomAnchor, constant: 0).isActive = true
    self.sideFocusGuide?.leftAnchor.constraint(equalTo: self.mainView.leftAnchor).isActive = true
    self.sideFocusGuide?.rightAnchor.constraint(equalTo: self.mainView.rightAnchor).isActive = true
    self.sideFocusGuide?.preferredFocusEnvironments = [self.rightView]
}

1 Ответ

0 голосов
/ 01 октября 2019

Я думаю, вам следует использовать другой UIFocusGuide, который переключает фокус между UITableView и UITextField:

private var focusGuideTextFieldAndTableView: UIFocusGuide!

Инициализируйте его:

focusGuideTextFieldAndTableView = UIFocusGuide()
view.addLayoutGuide(focusGuideTextFieldAndTableView)
focusGuideTextFieldAndTableView.leftAnchor.constraint(equalTo: tableView.rightAnchor).isActive = true
focusGuideTextFieldAndTableView.topAnchor.constraint(equalTo: tableView.topAnchor).isActive = true
focusGuideTextFieldAndTableView.bottomAnchor.constraint(equalTo: tableView.bottomAnchor).isActive = true
focusGuideTextFieldAndTableView.rightAnchor.constraint(equalTo: textField.leftAnchor).isActive = true
focusGuideTextFieldAndTableView.preferredFocusEnvironments = [textField]

Переключите preferredFocusEnvironments вdidUpdateFocus(in:with:):

override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
    super.didUpdateFocus(in: context, with: coordinator)
    if context.nextFocusedView == textField {
        focusGuideTextFieldAndTableView.preferredFocusEnvironments = [tableView]
    } else if context.previouslyFocusedView == textField {
        focusGuideTextFieldAndTableView.preferredFocusEnvironments = [textField]
    }
}
...