tvOS как проверить, ориентирован ли UITabBar - PullRequest
0 голосов
/ 26 марта 2019

Я ищу способ сделать пользовательский переход при смене фокуса с или на UITabBar.

В настоящее время я пытаюсь это переопределить метод didUpdateFocus, но мне кажется, что я не могу проверить, фокусируется ли tabBar.

Кажется, сама TabBar никогда не находится в "сфокусированном" состоянии:

override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinatora)
{
    super.didUpdateFocus(in: context, with: coordinator)

    print(self.tabBar.isFocused) // always false
}

При проверке UIFocusUpdateContext текущим фокусированным элементом является UITabBarButton.

Но я не могу проверить, является ли контекст экземпляром UITabBarButton, потому что этот тип недоступен:

context.nextFocusedItem is UITabBarButton // can't compile

Я действительно застрял здесь и буду рад любым советам о том, как справиться с этим.

Спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Я создал расширение на UIView, которое будет проверять, есть ли фокус где-то в его иерархии:

func containsFocus() -> Bool {
    if self.isFocused { return true }
    else {
        for subview in self.subviews {
            if subview.containsFocus() { return true }
        }

        return false
    }
}

Таким образом, вы можете проверить, имеет ли ваш UITabBar фокус.

Примечание:

Это очень дорогой способ проверки того, имеет ли ваше представление фокус, потому что это рекурсивная функция, которая потенциально пересекает всю иерархию вашего представления.

Совет:

Если вы пытаетесь реализовать пользовательский переход при выборе вкладок в UITabBar, вам следует использовать метод UITabBarDelegate:

 func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem)

Если нет, просто проигнорируйте этот совет.

...