鉴于以下观点:
struct ContentView: View {
@State private var text: String = ""
var body: some View {
VStack {
TextField("Example", text: self.$text)
Text(self.text)
}
.padding()
.foregroundStyle(self.text.count % 2 == 0 ? .red : .blue)
}
}
输入文本时,我希望
TextField
的前景色在红色和蓝色之间变化。但是,它不适用于 iOS 17.4(它适用于 iOS 16.x 和 iOS 17 至 17.2)。是否有新的方法来实现此行为,或者它是否是 iOS 17.3+ 中的潜在错误?
在装有 iOS 17.4 的 iPhone 15 模拟器上运行时,
Text
正在改变颜色,但 TextField
没有。这可能是因为,TextField
不依赖于会导致其在输入文本后刷新的状态变量,它仅依赖于其自身。
解决方法是对颜色使用单独的状态变量,并在
.onChange
处理程序中更新它:
@State private var text: String = ""
@State private var fgColor = Color.red
var body: some View {
VStack {
TextField("Example", text: self.$text)
Text(self.text)
}
.padding()
.foregroundStyle(fgColor)
.onChange(of: text) { oldVal, newVal in
fgColor = newVal.count % 2 == 0 ? .red : .blue
}
}