Disable NSTextAttachment Action and Sharing Services Menu Drop-Down
By default, NSTextView will show the NSSharingServicePicker button when you hover over an image inside the text view. That’s true even for custom image-based NSTextAttachments in the attributed string.

The default menu item is limited to “Markup” and a “Services” submenu, I believe. Apps can register to be shown in this menu, and users can customize the menu in System Preferences.
But what if you want to hide this dropdown button thingie completely?
NSTextView.orderFrontSharingServicePicker(_:)is supposed to be used, but in my tests, I couldn’t get this to be called at all in subclasses ofNSTextView.NSTextViewDelegate.textView(_:willShow:forItems:)is supposed to be called by the text view to customize the sharing service menu, but again, this method isn’t called during my tests at all.- In my tests, I found that
NSTextViewregisters itself as theNSSharingServicePickerDelegate, so there’s that.
I don’t know why the official means to react to the service picker don’t work, but here’s something that does the trick: override the default behavior in a NSTextView subclass.
class MyTextView: NSTextView {}
extension MyTextView: NSSharingServicePickerDelegate {
public func sharingServicePicker(
_ sharingServicePicker: NSSharingServicePicker,
sharingServicesForItems items: [Any],
proposedSharingServices proposedServices: [NSSharingService]
) -> [NSSharingService] {
// Deactivate sharing services completely.
return []
}
}
In my mind, this is only a temporary quick fix until I figure out why the default pathways don’t trigger as expected. Things to look into include the setup of the NSTextAttachments – do the default pathways work when you use a NSTextAttachment with a FileWrapper instead of a custom cell? Do they work if you declare rich text support on the text view?
If you know anything, I’d love to hear how you tackled this.