我在向应用程序添加一个字段时遇到问题,用户可以在其中输入格式化文本,并且能够在聚焦时将其删除。
有趣的是,该应用程序在 iOS 17 上运行正常,并且在键入时按“x 按钮”会删除文本。然而,在较低的 iOS 版本上,什么也没有发生,文本也不会消失。
第一个 gif (iOS 15.5) 第二个 (iOS 17.2) 这是我的代码。
import SwiftUI
struct ContentView: View {
@FocusState var isFocused: Bool
@State var text = 0
var body: some View {
VStack {
HStack {
TextField("write text here...",
value: $text,
format: .number)
.focused($isFocused)
.keyboardType(.numberPad)
if isFocused {
Button("",
systemImage: "xmark.circle.fill") {
text = 0
}
}
}
.border(.black)
}
.padding()
}
}
有谁知道发生了什么事以及如何使该应用程序像在 17 上那样在所有 iOS 版本上运行?
我不明白 17 之前的 iOS 上发生了什么... isFocused 属性在任何版本的操作系统上始终为 true。我设法让它工作的唯一方法是这个,这确实是一个解决方法:
VStack {
HStack {
TextField("write text here...",
value: $text,
format: .number)
.focused($isFocused)
.keyboardType(.numberPad)
.overlay(alignment: .trailing) {
Button("", systemImage: "xmark.circle.fill") {
if #available(iOS 17, *) {
text = 0
return
}
isFocused.toggle()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
text = 0
isFocused.toggle()
}
}
.opacity(isFocused ? 1 : 0)
.disabled(!isFocused)
}
}
.border(.black)
}
.padding()
我还使用覆盖层改进了布局以显示 X 按钮和不透明度并禁用修改器以避免显示它并与之交互。 这种行为也可能是旧操作系统版本上的错误。 让我知道该解决方案是否适合您!