我正在将文本字段的 FocusState 属性传递给子视图。这按预期工作。在这个子视图中,我想让预览工作,但是我似乎无法为 Focusstate 设置一个常量值。有人有想法吗?
struct MainContentView: View {
@FocusState private var focusedField: Bool
var body: some View {
ScoreView(focussed: $focusedField)
}
}
struct ScoreView: View {
@FocusState.Binding var focussed: Bool
var body: some View {
someSubView(focussed: $focussed)
}
}
struct ScoreView_Previews: PreviewProvider {
static var previews: some View {
ScoreView(focussed: ????????). <- here
}
}
我希望能够像@State 布尔属性一样为状态属性设置一个常量,但我收到消息:
类型“FocusState.Binding”没有成员“常量”
您只能从
FocusState<Bool>.Binding
创建FocusState<Bool>
,因此您需要在预览中访问FocusState<Bool>
。我通常通过将预览类型变成View
来做这种事情,就像这样:
struct ScoreView_Previews: PreviewProvider, View {
@FocusState var focus = false
var body: some View {
ScoreView(focussed: $focus)
}
static var previews: some View {
Self()
}
}
如果您使用的是 Bool,那么它将需要一个值,但如果您对 FocusState 使用 Enum 或其他 Hashable 类型,则可以在父视图中将其设为可选,并在预览中以相同的方式声明它:
@FocusState static var focus: SomeHashable?
这应该有帮助
FocusState<Bool>().projectedValue
struct ScoreView_Previews: PreviewProvider {
static var previews: some View {
ScoreView(focussed: FocusState<Bool>().projectedValue)
}
}