如何在 SwiftUI Preview 中设置 @FocusState 的值

问题描述 投票:0回答:3

我正在将文本字段的 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”没有成员“常量”

swiftui binding preview
3个回答
0
投票

您只能从

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()
    }
}

0
投票

如果您使用的是 Bool,那么它将需要一个值,但如果您对 FocusState 使用 Enum 或其他 Hashable 类型,则可以在父视图中将其设为可选,并在预览中以相同的方式声明它:

@FocusState static var focus: SomeHashable?


0
投票

这应该有帮助

FocusState<Bool>().projectedValue

struct ScoreView_Previews: PreviewProvider {
    static var previews: some View {
        ScoreView(focussed: FocusState<Bool>().projectedValue)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.