如何在tvOS(AppleTV)上运行特定按钮以获得焦点? (目标C)

时间:2015-10-01 21:06:54

标签: objective-c focus tvos

项目有一些不同按钮的视图。当我隐藏视图并显示其他视图时,我无法将注意力集中在我的按钮上。

我认为与setNeedsFocusUpdate有关。我已经阅读了Apple doc。没有任何例子。

有谁知道怎么做并举一个例子(目标C)?

4 个答案:

答案 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()

这会自动将焦点从被移除的按钮上移开,并将其交给另一个仍在屏幕上的按钮。