tvOS 10.不推荐使用PreferredFocusView.如何更改为preferredFocusEnvironment?

Nat*_*271 3 objective-c apple-tv tvos

我有一个子视图,我已经覆盖了preferredFocusedView.子类有一个名为viewToFocus的UIView.我检查该视图是否存在,如果是,我关注该视图,如果不是,我返回父视图的preferredFocusedView.

自从我今天更新到tvOS 10后,我收到以下错误:

'preferredFocusedView'已弃用:首先在tvOS 10.0中弃用 - 改为使用-preferredFocusEnvironments.

我无法在文档中找到解释preferredFocusEnvironment如何实现的任何地方.在文档中找到了支持你的应用程序中的焦点,它说

覆盖preferredFocusedView以指定默认情况下焦点的起始位置.

我尝试添加UIFocusEnvironment协议,但我不知道如何用它替换'preferredFocusedView'的功能.

- (UIView *)preferredFocusedView {
    if (self.viewToFocus) {
        UIView *newView = self.viewToFocus;
        self.viewToFocus = nil;

        return newView;
    } else {
        return [super preferredFocusedView];
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Rom*_*mov 9

您需要通过preferredFocusEnvironments调用而不是像以前那样只传递一个视图来传递视图数组.必须按焦点优先级排序此视图.因此,如果UIButtonUIViewControllerpreferredFocusEnvironments物业有3个项目可以实施以下内容:

- (NSArray<id<UIFocusEnvironment>> *)preferredFocusEnvironments {

    return @[self.b3, self.b2, self.b1];
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你只需要返回@[newView]一个结果.