【发布时间】:2015-10-01 21:06:54
【问题描述】:
该项目有一些带有不同按钮的视图。当我隐藏一个视图并显示另一个视图时,我无法将焦点放在我的按钮上。
我认为与setNeedsFocusUpdate 有关。我已阅读 Apple 文档。没有任何例子。
有谁知道怎么做并举个例子(目标C)?
【问题讨论】:
标签: objective-c focus tvos
该项目有一些带有不同按钮的视图。当我隐藏一个视图并显示另一个视图时,我无法将焦点放在我的按钮上。
我认为与setNeedsFocusUpdate 有关。我已阅读 Apple 文档。没有任何例子。
有谁知道怎么做并举个例子(目标C)?
【问题讨论】:
标签: objective-c focus tvos
你需要覆盖preferredFocusedView,当你隐藏一个视图并在那里显示时调用这个方法setNeedsFocusUpdate,你的preferredFocusedView实现应该是这样的
- (UIView *)preferredFocusedView
{
// Add your logic here, it could be more complicated then what is below
if (view1.hidden)
{
return _button;
}
else
{
return _button2
}
}
如果您想让自定义视图获得焦点,请覆盖 canBecomeFocused 方法并返回 true
编辑
您可以使用添加断点并执行此命令po [buttonYouWantToFocus _whyIsThisViewNotFocusable] 它会告诉您为什么它无法聚焦。
【讨论】:
setNeedsFocusUpdate 。我试图打电话给它,但我什么也没得到。请给我举个例子好吗?
如果您以编程方式添加子视图,也许这就是您想要的:
- (UIView *)preferredFocusedView {
return [view1 preferredFocusedView];
}
【讨论】:
我知道您的问题是针对 Objective-C 的,但这里有一种在 Swift 中解决此问题的方法。您需要覆盖 preferredFocusedView 属性。
override var preferredFocusedView: UIView? {
guard primaryView.hidden == false else {
return secondaryView
}
return primaryView
}
然后,只要发生导致您的视图被隐藏的事件,只需调用 setNeedsFocusUpdate()。希望这会有所帮助...
【讨论】:
另一个选项(如果您不想使用preferredFocusedView)是,不要将视图设置为隐藏,只需将其从其超级视图中删除,如下所示:
myView.removeFromSuperview()
这会自动将焦点从已移除的按钮上移开,并将其转移给仍在屏幕上的另一个按钮。
【讨论】: