项目有一些不同按钮的视图。当我隐藏视图并显示其他视图时,我无法将注意力集中在我的按钮上。
我认为与setNeedsFocusUpdate
有关。我已经阅读了Apple doc。没有任何例子。
有谁知道怎么做并举一个例子(目标C)?
答案 0 :(得分:3)
您需要覆盖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]
它会告诉您为什么它不可调焦。
答案 1 :(得分:0)
如果您是以编程方式添加子视图,也许这就是您想要的:
- (UIView *)preferredFocusedView {
return [view1 preferredFocusedView];
}
答案 2 :(得分:0)
我意识到你的问题是针对Objective-C的,但这里是一种在Swift中解决这个问题的方法。您需要覆盖preferredFocusedView属性。
override var preferredFocusedView: UIView? {
guard primaryView.hidden == false else {
return secondaryView
}
return primaryView
}
然后只要发生导致隐藏视图的事件,就调用setNeedsFocusUpdate()。希望这会有所帮助...
答案 3 :(得分:0)
另一个选项(如果您不想使用preferredFocusedView
)是,而不是将您的视图设置为隐藏,只需将其从超级视图中删除,如下所示:
myView.removeFromSuperview()
这会自动将焦点从被移除的按钮上移开,并将其交给另一个仍在屏幕上的按钮。