gpt4 book ai didi

swiftui - 在 SwiftUI 中处理 tvOS 上的焦点事件更改

转载 作者:行者123 更新时间:2023-12-05 07:07:28 26 4
gpt4 key购买 nike

如何在 SwiftUI 中响应 tvOS 上的焦点事件?

我有以下 SwiftUI View :

struct MyView: View {
var body: some View {
VStack {
Button(action: {
print("Button 1 pressed")
}) {
Text("Button 1")
}.focusable(true) { focused in
print("Button 1 focused: \(focused)")
}
Button(action: {
print("Button 2 pressed")
}) {
Text("Button 2")
}.focusable(true) { focused in
print("Button 2 focused: \(focused)")
}
}
}

单击任一按钮都会正确打印出来。但是,在两个按钮之间更改焦点不会打印任何内容。

This guy正在对列表中的行做同样的事情并说它开始使用 Xcode 11 GM 为他工作,但我在 11.5 上并且它绝对不起作用(至少不适用于按钮(或切换 - 我也试过那些)) .

阅读 the documentation ,这似乎是解决此问题的正确方法,但它似乎实际上不起作用。我是不是遗漏了什么,或者这只是坏了?

最佳答案

以防其他人偶然发现这个问题,答案是让您的 View 以数据为中心

因此,如果您在 ScrollView 中有一个电影列表,您可以将其添加到您的外部 View 中:

var myMovieList: [Movie];
@FocusState var selectedMovie: Int?;

然后在你 body 属性的某处:

ForEach(0..<myMovieList.count) { index in 
MovieCard(myMovieList[i])
.focusable(true)
.focused($selectedMovie, equals: index)
}

.focusable() 告诉操作系统这个元素是可聚焦的,而 .focused 告诉它在绑定(bind)变量 ($selected) 等于传递给 equals 的值时使该 View 聚焦:...

例如在 tvOS 上,如果您将其包装在 ScrollView 中并按左/右,它将更改选择并更新 $selectedMovie 变量中的选定索引;然后您可以使用它来索引您的电影列表以显示额外信息。

这是一个更完整的示例,它也将缩放所选 View :

https://pastebin.com/jejwYxMU

关于swiftui - 在 SwiftUI 中处理 tvOS 上的焦点事件更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62142787/

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