swiftui - 如何在 SwiftUI 中设置按钮焦点?
问题描述
!!!TVOS
!!!
我有按钮列表,它以某种方式自动聚焦该列表中的第一个按钮(加载视图时)。有什么方法可以使用 聚焦该列表中的另一个按钮SwiftUI
吗?
我知道有preferredFocusedView
,UIKit
但我喜欢在SwiftUI
.
感谢您的任何建议!
解决方案
SwiftUI 2.0
笔记: !!部分解决方案!!
以下方法经 Xcode 12b5 / tvOS 14 测试仅适用于堆栈,不适用于 List/ScrollView(在任何测试组合中)。
无论如何,它适用于屏幕上的小按钮集,因此值得发布。
struct DemoPreferredFocusView: View {
@Namespace var ns
@Environment(\.resetFocus) var resetFocus
@AppStorage("initialButton") var initialButton: Int = 3
var body: some View {
VStack {
ForEach(0..<10, id: \.self) { i in
Button(action: {
print(">> tapped \(i)")
self.initialButton = i
}) {
Text("Button \(i)")
}
.prefersDefaultFocus(i == initialButton, in: ns)
}.focusScope(ns)
}
.onAppear {
DispatchQueue.main.async {
self.resetFocus.callAsFunction(in: ns)
}
}
}
}
推荐阅读
- scala - 为什么 spark (scala API) agg 函数需要 expr 和 exprs 参数?
- vuex - Nuxt 在插槽中使用组件,vuex 存储未定义
- junit5 - 断言数组中的值,数组没有名称
- assembly - 在程序集中读取命令行参数
- listview - Flutter Listview 语言选择需要在选择时进行圆形复选框设计
- apache-kafka - 附加卷时,Kafka connect 找不到可用的代理
- react-native - 获取存储在状态中的数组长度时出错
- python - Python:有没有办法提取和连接多个文本文件系列,同时删除每个文件的前 3 行?
- excel - 在其他工作表和向下填充日期的最后一行下方复制和粘贴动态范围
- markdown - doxygen 抱怨我的 image-in-link 标签