Während ich bin nicht wirklich sicher, warum dies durch Ziehen im Interface Builder nicht möglich ist, können Sie immer noch eine popover manuell mit dem Ziel präsentieren/Aktionsmechanismus. Ihre Symbolleistenschaltfläche ruft eine Aktion wie presentFooPopover(:)
auf, die NSViewController
's presentViewController(_ viewController: NSViewController, asPopoverRelativeTo positioningRect: NSRect, of positioningView: NSView, preferredEdge: NSRectEdge, behavior: NSPopover.Behavior)
ruft, um den Zielansichtcontroller des Popover von einer bestimmten Position in einer Ansicht darzustellen.
Der präsentierende View-Controller (auf dem Sie presentViewController...
aufrufen) muss nicht die Ansicht besitzen, die Sie für die Positionierung verwenden. Beachten Sie auch, dass die positioningRect
im Koordinatensystem positioningView
sein muss, daher wird normalerweise bounds
der Ansicht verwendet.
Wenn Sie all dies zusammenfügen, können Sie die Schaltfläche (sender
in Ihrer Aktion) als Positionierungsansicht übergeben und ihre Grenzen verwenden. Der View-Controller, der für die Präsentation des Popover verantwortlich ist, könnte Ihr Fenster-Controller oder der Content-View-Controller Ihres Fensters sein (oder wirklich alles, was nicht verschwindet, solange das Popover noch angezeigt wird, was auch das Popover verwerfen würde).