gpt4 book ai didi

swift - tvOS PressesBegan 调用得太晚(在焦点已经改变之后)

转载 作者:行者123 更新时间:2023-11-30 10:33:25 26 4
gpt4 key购买 nike

我的目标是每当用户按下 Apple TV Remote 上的“向上”键时调用 doSomething,且仅当 topButton 已获得焦点时。目标是如果 BottomButton 获得焦点,则 doSomething 不应被调用。但是,当用户按下向上键时,焦点会在调用 pressesBegan 之前向上移动到 topButton。这会导致 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()
}
}

因为如果用户在顶部按钮上按下向上键,焦点不会更新。

这会导致代码更加复杂(必须在两个函数之间添加属性和看起来奇怪的 if 语句,这会让其他开发人员感到困惑)。有没有更有效的解决方法?

最佳答案

能够使用 UIFocusGuide 解决它。我发现 pressesBegan 的另一个问题是它没有检测用户是否向上滑动。 UIFocusGuide 可以处理这两种情况。

关于swift - tvOS PressesBegan 调用得太晚(在焦点已经改变之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58613385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com