altimes
altimes

Reputation: 430

SwiftUI is there any way of getting a disabled TextField to be grayed out on Mac OS

When a SwitfUI TextField is disabled, on Mac OS, there is no visual feedback that the field is not enterable (apart from not accepting focus click). I have searched high and low, it looks like simply setting .background(Color.whatever) works for IOS (from all the "how tos" that I have encountered). However for a Mac OS app, it only changes the color of the thin boundary of the textfield. I have futzed around and found that I can add opaque overlays to simulate the effect, but that seems overly complex for what I always took to be conventional standard of greying out of disabled fields. Which makes me think that I am missing something bleedingly obvious somewhere.

Has anyone a sample of a MacOS SwiftUI struct that greys the background of a disabled TextField ? My minimal example of what I am doing to see the issue is below.

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

Upvotes: 1

Views: 2468

Answers (1)

it seems to be "fixed' in swiftUI 3.0, macos 12. I get a slightly darker shade of gray when disabled. When in focus, I get a blue border.

Edit:

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

Upvotes: 2

Related Questions