【发布时间】:2019-11-02 16:18:03
【问题描述】:
我有一个带有发送按钮的文本字段,它是一个 systemImage 箭头。我希望图像的前景色根据 textField 是否为空而改变。 (即按钮是灰色的,如果文本字段为空则禁用。如果文本字段文本的计数> 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-binding 模式。