ios - SwiftUI:如何仅在需要时更新从父 View 传输的变量?

标签 ios swiftui

我想将变量从父 View 传递到 subview ,但在这个 subview 中,在文本字段中使用它,但仅在按下“保存”按钮时更新此值。

我试过这个:

父 View

struct ParentView: View {
    @State private var name: String = ""
    
    var body: some View {
        HStack {
            Text("User name: \(name)")
            Spacer()
            NavigationLink(
                destination: ChildView(name: name),
                label: {
                    Text("Update name")
                }
            )
        }
    }
}

subview

struct ChildView: View {
    @State private var name: String = ""
    @Binding var passedName: String
    
    var body: some View {
        VStack {
            Form {
                TextField("Update name", text: $name)
                Button(action: {
                    passedName = name
                }, label: {
                    Text("SAVE")
                })
            }
        }
    }
    
    init(name: String) {
        self._passedName = .constant(name)
        self.name = name
    }        
}

因为我不想直接更新变量,所以我尝试使用一个name值,然后只在OK按钮时设置绑定(bind)的passedName的值被窃听。但它不起作用。

我不知道如何做我想做的事。

谢谢你的帮助

最佳答案

您的一般方法是正确的 - 有一个状态变量来表示临时键入的名称,但是有一个绑定(bind)来表示“返回”给父级的名称。

因为子项修改了父项拥有的数据,所以它需要接受一个绑定(bind)——而不是普通的 String:

struct ChildView: View {
    @State private var name: String
    @Binding var passedName: String
    
    var body: some View {
        VStack {
            Form {
                TextField("Update name", text: $name)
                Button(action: {
                    passedName = name
                }, label: {
                    Text("SAVE")
                })
            }
        }
    }

    init(name: Binding<String>) {
        self._passedName = name
        self._name = State(initialValue: name.wrappedValue)
    }
}

然后,传入来自父级的绑定(bind):

ChildView(name: $name)

关于ios - SwiftUI:如何仅在需要时更新从父 View 传输的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64526552/

相关文章:

ios - 尝试在 60 秒后触发警报框。这是行不通的

swift - 如何使用 SwiftUI 中的扩展将 Hashable 协议(protocol)添加到 CLLocationCoordinate2D

ios - 为 SpriteKit 转换 UITapGestureRecognizer 的触摸位置 - Swift

ios - UILocalNotification 始终提供默认声音

ios - 分组 ios 推送通知目标

SwiftUI:防止长词断字

ios - 如何在 WidgetKit、SwiftUI 中更改午夜 View ?

ios - Xcode TARGET_OS_IPHONE 似乎很困惑,错误或配置错误?

iOS 屏幕坐标和缩放

navigation - 为 SwiftUI Apple Watch 应用实现基于页面的导航