SwiftUI Tooltips

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) {
    }
}
Post marked as downvoted Up vote reply of mwp Down vote reply of mwp
Post marked as solved

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 to NSViewRepresentableContext<TooltipView>

Add a Comment