>Hy,
我在 tvOS 上有一个视图,其中包含两个不同大小的视图。当我从左侧视图移动时,我想聚焦左侧视图中的项目,但这并没有发生。
下面是它的外观:查看
左视图是表视图,右视图是顶部有一个文本字段的UIView。我希望当我从表视图移动到专注于文本字段时。但现在它没有发生。
我在主控制器上创建了一个焦点指南,其中包含与主控制器具有相同锚点的两个视图,但它不起作用。喜欢这个:
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]
}
我认为您应该使用另一种在UITableView
和UITextField
之间切换焦点的UIFocusGuide
:
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]
didUpdateFocus(in:with:)
中的切换preferredFocusEnvironments
:
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]
}
}