tvOS 10. PreferredFocusView устарела. Как мне перейти на предпочтительный FocusEnvironment?

У меня есть подпредставление, для которого я переопределил предпочитаемый FocusedView. У подкласса есть UIView, называемый viewToFocus. Я проверяю, существует ли это представление, если оно фокусируется на этом представлении, если нет, я возвращаю предпочитаемый вид родительского объекта.

Поскольку сегодня я обновился до tvOS 10, я получаю следующую ошибку:

"Предпочитаемое фокусированное представление" устарело: сначала устарело в tvOS 10.0 - используйте вместо него -preferredFocusEnvironments.

Я не могу найти где-нибудь в документации, которая объясняет, как предпочитаемый FocusEnvironment должен быть реализован. В документации, найденной Supporting Focus в вашем приложении, говорится

Переопределите предпочитаемый вид фокуса, чтобы указать, где фокус должен начинаться по умолчанию.

Я попытался добавить протокол UIFocusEnvironment, но я не уверен, как заменить на него функциональность "предпочитаемый фокус".

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

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

Спасибо

1 ответ

Решение

Вам нужно передать массив просмотров в результате preferredFocusEnvironments звоните вместо одного представления, как это было раньше. Эти представления должны быть упорядочены по приоритету фокуса. Итак, если у вас есть 3 UIButton предметы на вашем UIViewController preferredFocusEnvironments Свойство может быть реализовано следующим образом:

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

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

В вашем случае вам просто нужно вернуть @[newView] в следствии.

Другие вопросы по тегам