【问题标题】:SwiftUI is there any way of getting a disabled TextField to be grayed out on Mac OSSwiftUI 有没有办法让禁用的 TextField 在 Mac OS 上变灰
【发布时间】:2021-07-21 06:18:48
【问题描述】:

当 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)
    }
  }
}

【问题讨论】:

  • 您是否考虑过,如果 MacOS 上的 正常 行为是因为没有视觉反馈,那么您的应用程序会因为不同的行为而被认为是错误的或奇怪的?
  • 我同意你的观点。查看 Mac 首选项,“约定”似乎是禁用的字段具有灰色文本和启用的字段黑色。
  • 尽管如此,对于作为新手的我来说,IOS 和 MacOS 之间相同基本代码的明显功能差异是值得注意的(即使考虑到我试图做的事情会被认为是糟糕的做法; -))

标签: macos swiftui textfield


【解决方案1】:

它似乎在 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)
    }
}

【讨论】:

  • 正如 Damien 所说,我试图打破常规。为了遵循约定,我会用 .foregroundColor(nameEditDisabled ? Color.gray: Color.black) 替换背景线
  • 我已经用“非常规”的方式编辑了答案。这会在启用时为您提供黄色背景,在禁用时为您提供“常规”灰色背景。
  • 非常感谢,它正是我想要实现的目标。 “colorMultiply”....永远不会做到这一点。你每天都会学到新东西:-)
  • 很高兴它有帮助。如果你能把答案勾选为正确,那也很好。
猜你喜欢
  • 2014-09-16
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 2011-11-16
  • 2011-01-30
  • 2020-05-06
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多