【问题标题】:SwiftUI - Mutable @FocusState for child view?SwiftUI - 子视图的可变@FocusState?
【发布时间】:2021-12-09 14:04:58
【问题描述】:

我有一个带有@FocusState 变量的父视图,我想将它传递给包含TextField 的子视图。我希望能够从子视图中更改FocusState,但我收到错误Cannot assign to property: 'self' is immutableCannot assign value of type 'Bool' to type 'FocusState<Bool>.Binding'

父视图:

struct ParentView: View {
    @State private var text: String
    @FocusState private var isEditing: Bool
    
    var body: some View {
        ChildView($text, $isEditing)
    }
}

struct ChildView: View {
    @Binding var text: String
    var isEditing: FocusState<Bool>.Binding
    
    init(_ text: Binding<String>, _ isEditing: FocusState<Bool>.Binding) {
        self._text = text
        self.isEditing = isEditing
    }
    
    var body: some View {
        TextField("Username", text: $text)
            .focused(isEditing)
        
        Button("Click me!") {
            isEditing = false  // Error here
        }
    }
}

非常感谢!

【问题讨论】:

    标签: ios swift iphone swiftui ios15


    【解决方案1】:

    只需通过绑定分配给包装的值,例如

    Button("Click me!") {
        isEditing.wrappedValue = false  // << here !!
    }
    

    【讨论】:

    • 有效!有什么方法可以让 isEditing 只出现在那个特定的TextField 上?当我有多个 ChildView 并点击一个时,它会在每个项目上触发它,而不仅仅是焦点所在的那个。
    • 忽略我最后的评论,我可以通过 equals: 聚焦参数实现这一点
    猜你喜欢
    • 2022-09-29
    • 2022-01-14
    • 1970-01-01
    • 2022-11-25
    • 2020-11-22
    • 2022-06-10
    • 1970-01-01
    • 2019-10-30
    • 2022-10-20
    相关资源
    最近更新 更多