Моя цель - вызывать doSomething всякий раз, когда пользователь нажимает «вверх» на пульте Apple TV, только когда верхняя кнопка уже настроена. Цель состоит в том, чтобы doSomething НЕ вызывался, если нижняя кнопка была сфокусирована. Однако, когда пользователь нажимает вверх, фокус перемещается вверх до topButton перед вызовом pressesBegan. Это приводит к тому, что doSomething вызывается независимо от того, какая кнопка была сфокусирована.
func doSomething() {
// goal is this function should only run when topButton is focused
}
override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
guard presses.first?.type == UIPress.PressType.upArrow else { return }
print(self.topButton.isFocused)
print(self.bottomButton.isFocused)
if self.topButton.isFocused {
doSomething()
}
}
Обратите внимание, что этот обходной путь не работает:
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
guard let previouslyFocusedItem = context.previouslyFocusedItem as? UIButton else { return }
if previouslyFocusedItem == topButton {
self.doSomething()
}
}
Поскольку фокус не обновляется, если пользователь нажимаетв то время как на topButton.
Что приводит к более сложному коду (придется добавить свойства и странные операторы if между двумя функциями, которые запутывают других разработчиков). Есть ли более эффективный обходной путь?