一直在挖掘 documentation但我似乎无法找到一种方法来完成以下任务。
我的 SplitViewController
加载了一个 UITableView
作为主视图,但是我只需将 Apple TV Remote 向右滑动即可进入详细 View 。如何禁用此手势,以便仅在主视图中进行选择后才启用详细 View ?
根据文档,var presentsWithGesture: Bool
听起来是正确的做法,但这仅适用于已经隐藏的 View 。我的 View 并排显示,并且都可见。有什么想法吗?
最佳答案
你可以在你的主视图 Controller 上创建一个属性来跟踪你是否想关注细节 View Controller ,比如:
var presentDetail = false
那么您应该覆盖 shouldUpdateFocusInContext
以不允许焦点更新向右移动。
override func shouldUpdateFocusInContext(context: UIFocusUpdateContext) -> Bool {
if context.focusHeading == .Right { return false }
return super.shouldUpdateFocusInContext(context)
}
接下来您需要覆盖preferredFocusedView
:
override var preferredFocusedView: UIView?{
if self.presentDetail {
self.presentDetail = false
guard let vc = self.splitViewController?.viewControllers[1] else { return nil }
return vc.view
}
return self.tableView
}
通常我们会返回我们的 tableView 但当我们想将焦点转移到细节 View Controller 时我们会返回它的 View 。
最后我们实现didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let vc = self.splitViewController?.viewControllers[1] {
self.presentDetail = true
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
vc.setNeedsFocusUpdate()
vc.updateFocusIfNeeded()
}
}
我们请求更新主视图 Controller 和详细 View Controller 上的焦点引擎。
关于swift - tvOS 上的 UISplitViewController - 禁用滑动到详细 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033187/