如何以编程方式擦除 SwiftUI 中的可选 TextField 值?

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

在此示例中,我想使用自定义按钮清除 TextField 的值。然而,按钮动作(

value = nil
)似乎被忽略了。为什么?

示例视频

在 Xcode 14 beta 6 (iOS 16) 上测试。

struct ContentView: View {
    @State private var value: Int?
    @FocusState var focused: Bool
    
    var buttonOpacity: Double {
        focused && value != nil ? 1 : 0
    }
    
    var body: some View {
        Form {
            HStack {
                TextField("Value", value: $value, format: .number.grouping(.never))
                    .focused($focused)
                    .keyboardType(.numberPad)
                Spacer()
                Button {
                    value = nil
                } label: {
                    Label("Erase", systemImage: "multiply")
                        .labelStyle(.iconOnly)
                        .imageScale(.medium)
                        .symbolVariant(.circle.fill)
                        .symbolRenderingMode(.hierarchical)
                        .foregroundStyle(.secondary)
                }
                .buttonStyle(.plain)
                .opacity(buttonOpacity)
            }
        }
    }
}
swift swiftui
1个回答
0
投票
struct TextFieldTest: View {
@State private var value: Int?
@FocusState var focused: Bool

var body: some View {
    Form {
        HStack {
            TextField("Value", value: $value, format: .number.grouping(.never))
                .focused($focused)
                .keyboardType(.numberPad)
            Spacer()
            Button {
                DispatchQueue.main.asyncAfter(deadline: .now()) {
                    self.focused = false
                    self.value = nil
                }
            } label: {
                Text("Erase")
                    .foregroundColor(.black)
            }
            .buttonStyle(.plain)
        }
    }
}

试试这个。

© www.soinside.com 2019 - 2024. All rights reserved.