How do I set the tooltip for an AppKit SwiftUI view?
Apple Recommended
Replies
For the record there appears to be no native way to set a tooltip on a SwiftUI view (feedback #FB7095924), but the following workaround seems to do the trick:
public extension View {
/// Overlays this view with a view that provides a toolTip with the given string.
func toolTip(_ toolTip: String?) -> some View {
self.overlay(TooltipView(toolTip))
}
}
private struct TooltipView: NSViewRepresentable {
let toolTip: String?
init(_ toolTip: String?) {
self.toolTip = toolTip
}
func makeNSView(context: NSViewRepresentableContext) -> NSView {
let view = NSView()
view.toolTip = self.toolTip
return view
}
func updateNSView(_ nsView: NSView, context: NSViewRepresentableContext) {
}
}
Thanks, this was helpful.
I was using Popovers but they have their own issues and seemed a little heavy. This is really clean and works well.
I get the following errors:
Type 'TooltipView' does not conform to protocol 'NSViewRepresentable'
Reference to generic type 'NSViewRepresentableContext' requires arguments in <...>
-
to make it work, change
NSViewRepresentableContext
toNSViewRepresentableContext<TooltipView>
so how do I use .help("Tooltip text") view
-
Image(systemName: “arrow.uturn.backward.circle”) .help(”Undo last action”)
-
I tried the above but I don't see the tooltip in my Simulator.
XCode: Version 15.2 (15C500b)
-
@atluutran - In Xcode inline help for .help() is the hint that this modifier only works in macOS and visionOS.
Works "as designed" in macOS app! Thanks for the tip/hint. :-)