SwiftUI: How to listen for tap event on ColorPicker?

Viewed 656

When using onTapGesture, ColorPicker's system color picker UI not pop up after user tap:

@State var color = Color.red

//some other code

ColorPicker("Color:", selection: $color).onTapGesture {
    print("Tapped")
    //ColorPicker's system color picker UI not pop up
}

The simultaneousGesture method is also not working:

@State var color = Color.red

//some other code

ColorPicker("Color:", selection: $color).simultaneousGesture(TapGesture().onEnded {
    print("Tapped")
    //ColorPicker's system color picker UI not pop up
})

Wrapping ColorPicker in ZStack still fail:

@State var color = Color.red

//some other code

ZStack{
    ColorPicker("Color:", selection: $color)
}.simultaneousGesture(TapGesture().onEnded{
    print("Tapped")
    //ColorPicker's system color picker UI not pop up
})

If not add any gesture, ColorPicker's system color picker UI will pop up when user tap, but I can’t know in time when the user tapped until the user has selected a different color, it's too late:

@State var color = Color.red {
    didSet{
        print("This is too late.")
    }
}

//some other code

ColorPicker("Color:", selection: $color)

So, when user tap ColorPicker inside a view hierarchy, I need to do some operation, how can I listen for this?

1 Answers

You can use the onAppear modifier and perform your action.

.onAppear(perform: {
     backgroundType = "color"
})
Related