tvOS 上的 UISplitViewController - 禁用滑动到详细视图控制器
Posted
技术标签:
【中文标题】tvOS 上的 UISplitViewController - 禁用滑动到详细视图控制器【英文标题】:UISplitViewController on tvOS - Disable Swipe to Detail View Controller 【发布时间】:2016-06-25 21:37:36 【问题描述】:一直在挖掘documentation,但我似乎找不到完成以下任务的方法。
我的SplitViewController
加载了UITableView
作为主控,但是我可以简单地向右滑动 Apple TV 遥控器以进入详细信息视图。如何禁用此手势,以便仅在主视图中进行选择后启用详细视图?
从文档中,var presentsWithGesture: Bool
听起来是正确的做法,但这仅适用于已经隐藏的视图。我的视图并排显示,两者都是可见的。有什么想法吗?
【问题讨论】:
【参考方案1】:你可以在你的主视图控制器上创建一个属性来跟踪你是否想把焦点放在细节视图控制器上,比如:
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,但是当我们想要将焦点转移到细节视图控制器时,我们会返回它的视图。
最后我们实现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()
我们请求更新主视图控制器和详细视图控制器上的焦点引擎。
【讨论】:
以上是关于tvOS 上的 UISplitViewController - 禁用滑动到详细视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
关注 tvOS 上的 UICollectionViewCells