我有一个带有发送按钮的文本框,它是系统图像箭头。我想让图像的前景色根据文本框是否为空而更改。(例如,如果文本框为空,则按钮为灰色且被禁用。如果文本框文本的数量>1,则为蓝色)。
我有一个不完美的解决方法:
if chatMessageIsValid {
Spacer()
HStack {
TextField($chatMessage, placeholder: Text("Reply"))
.padding(.leading, 10)
.textFieldStyle(.roundedBorder)
Button(action: sendMessage) {
Image(systemName: "arrow.up.circle")
.foregroundColor(Color.blue)
.padding(.trailing, 10)
}.disabled(!chatMessageIsValid)
}
} else {
Spacer()
HStack {
TextField($chatMessage, placeholder: Text("Reply"))
.padding(.leading, 10)
.textFieldStyle(.roundedBorder)
Button(action: sendMessage) {
Image(systemName: "arrow.up.circle")
.foregroundColor(Color.gray)
.padding(.trailing, 10)
}.disabled(!chatMessageIsValid)
}
}
这个方法几乎可行,并且如果文本长度> 1,则可以更改图像的颜色。但是,由于状态的变化,您将在输入一个字符后退出编辑文本字段,并且需要重新选择文本字段才能继续输入。是否有更好的方法使用`.disabled`修饰符来完成此操作?
@State
绑定模式。 - matt