如何在 SwiftUI 中响应 tvOS 上的焦点事件?
我有以下 SwiftUI 视图:
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)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
单击任一按钮即可正确打印。但是,在两个按钮之间更改焦点不会打印任何内容。
这个家伙正在对列表中的行做同样的事情,并说它开始为他使用 Xcode 11 GM 工作,但我使用的是 11.5,它绝对不起作用(至少不适用于按钮(或切换 - 我也尝试过) ))。
阅读文档,这似乎是解决此问题的正确方法,但它似乎实际上不起作用。我错过了什么,还是这只是坏了?
如果其他人偶然发现这个问题,答案是让您的视图以数据为中心
因此,如果您在滚动视图中有一个电影列表,您可以将其添加到外部视图中:
var myMovieList: [Movie];
@FocusState var selectedMovie: Int?;
Run Code Online (Sandbox Code Playgroud)
然后在你身体的某个地方:
ForEach(0..<myMovieList.count) { index in
MovieCard(myMovieList[i])
.focusable(true)
.focused($selectedMovie, equals: index)
}
Run Code Online (Sandbox Code Playgroud)
.focusable() 告诉操作系统该元素是可聚焦的,.focused 告诉它当绑定变量 ($selected) 等于传递给 equals 的值时使该视图聚焦:...
例如,在 tvOS 上,如果您将其包装在滚动视图中并按向左/向右,它将更改选择并更新 $selectedMovie 变量中的选定索引;然后,您可以使用它来索引您的电影列表以显示额外信息。
这是一个更完整的示例,它也将缩放所选视图:
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |