我希望在UIAlertController
的{{1}}上方显示UIViewController
。集合视图需要专注于启动,因此我将UICollectionView
变量覆盖如下:
preferredFocusableView
使用tvOS 9一切正常:警报控制器正常打开,我可以选择显示的override var preferredFocusedView: UIView? {
return self.collectionView
}
之一。
在tvOS 10 Golden Master上,打开警报控制器并滚动到另一个动作后,焦点从屏幕上消失,我无法滚动到其他操作或点击Siri遥控器的菜单按钮。应用程序仍然停留在警报控制器中,当我尝试滚动到其他操作但屏幕上没有任何操作时,我可以听到滚动声音。我必须强制退出应用程序并重新打开它。
这是应用的代码。我尝试将UIAlertAction
设置为preferredFocusableView
或删除集合视图的焦点方法,但没有结果。
alertController.preferredFocusedView
答案 0 :(得分:4)
在附加的应用程序中,您将覆盖该功能 返回
UIScrollView
的扩展名中的true
canBecomeFocused()
,这是这些意外方面的原因 效果。移动到第二个时,焦点似乎正在消失UIAlertController
选项;然而,它实际上是转移焦点 滚动视图包裹着各种组件UIAlertController
,因为现在由于扩展而允许 如上所述。要解决此问题,请创建要使用的
的情况下UIScrollView
的自定义子类 仅在canBecomeFocused()
必须返回true
。
答案 1 :(得分:1)
您正在覆盖整个系统焦点引擎。试试这个:
// MARK: - Update Focus Helper
var viewToFocus: UIView? = nil {
didSet {
if viewToFocus != nil {
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}
}
}
override weak var preferredFocusedView: UIView? {
if viewToFocus != nil {
return viewToFocus
} else {
return super.preferredFocusedView
}
}
然后在您希望焦点更改为视图时将警报设置为视图:
viewToFocus = someView