tvOS 10. PreferredFocusView 已弃用。如何更改为 preferredFocusEnvironment?

tvOS 10. PreferredFocusView is deprecated. How do I change to preferredFocusEnvironment?

我有一个子视图,我已经覆盖了 preferredFocusedView。子类有一个名为 viewToFocus 的 UIView。我检查该视图是否存在,如果存在,我将聚焦该视图,如果不存在,我 return 父级的 preferredFocusedView。

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

'preferredFocusedView' is deprecated: first deprecated in tvOS 10.0 - Use -preferredFocusEnvironments instead.

我在说明如何实施 preferredFocusEnvironment 的文档中找不到任何地方。在找到的文档 Supporting Focus within Your App 中,它说到

Override the preferredFocusedView to specify where focus should start by default.

我尝试添加 UIFocusEnvironment 协议,但我不确定如何用它替换 'preferredFocusedView' 的功能。

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

        return newView;
    } else {
        return [super preferredFocusedView];
    }
}

谢谢

作为 preferredFocusEnvironments 调用的结果,您需要传递一组视图,而不是像以前那样只传递一个视图。此视图必须按焦点优先级排序。因此,如果您的 UIViewController 上有 3 UIButton 项,则 preferredFocusEnvironments 属性 可以执行以下操作:

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

    return @[self.b3, self.b2, self.b1];
}

在你的情况下,你只需要return一个@[newView]作为结果。