在此示例中,我想使用自定义按钮清除 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)
}
}
}
}
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)
}
}
}
试试这个。