首页 > 解决方案 > SwiftUI 有没有办法让禁用的 TextField 在 Mac OS 上变灰

问题描述

当 SwitfUI TextField 被禁用时,在 Mac OS 上,没有视觉反馈表明该字段不可输入(除了不接受焦点单击)。我搜索了高低,看起来简单地设置 .background(Color.whatever) 适用于 IOS(来自我遇到的所有“how tos”)。但是对于 Mac OS 应用程序,它只会更改文本字段的细边界的颜色。我摸索了一下,发现我可以添加不透明的叠加层来模拟效果,但这对于我一直认为的禁用字段变灰的传统标准来说似乎过于复杂。这让我觉得我在某处遗漏了一些非常明显的东西。

有没有人有一个 MacOS SwiftUI 结构的样本,它使禁用的 TextField 的背景变灰?我正在做什么以查看问题的最小示例如下。

struct ContentView: View {
  @State var nameEditDisabled = true
  @State var myText = "Fred"
  var body: some View {
    VStack {
      Button("Change Name") {
        nameEditDisabled.toggle()
      }
      TextField("hello", text: $myText)
        .background(nameEditDisabled ? Color.gray: Color.yellow)
        .disabled(nameEditDisabled)
    }
  }
}

标签: macosswiftuitextfield

解决方案


它似乎在 swiftUI 3.0、macos 12 中被“修复”了。禁用时,我的灰色阴影稍暗。当焦点对准时,我得到一个蓝色边框。

编辑:

struct ContentView: View {
    @State var nameEditDisabled = false
    @State var myText = "Fred"
    var body: some View {
        VStack {
            Button("Change disabling") {
                nameEditDisabled.toggle()
            }
            TextField("hello", text: $myText)
                .colorMultiply(nameEditDisabled ? .gray: .yellow)
                .disabled(nameEditDisabled)
        }.frame(width: 444, height: 444)
    }
}

推荐阅读