Ich bin mir nicht sicher, ob es eine eingebaute Methode dafür gibt (obwohl es wirklich ein eklatantes Loch in der NSSegmentedControl-API ist).
Ich empfehle, das zu tun, was Sie machen, indem Sie das Kontextmenü aufrufen. Anstatt jedoch nur den Ursprung des segmentierten Steuerelements zu verwenden, können Sie ihn wie folgt direkt unter dem Segment positionieren:
%Vor%Es ist nicht perfekt oder ideal, aber es sollte den Job erledigen und das Aussehen / Verhalten geben, das Ihre Benutzer erwarten.
(als Nebenbedingung benötigt NSSegmentedControl wirklich eine %code% -Methode)
Dies ist die Swift-Version der Antwort von J Hoover und der Mod von Adam Treble. Der Override war nicht so intuitiv wie ich es mir vorgestellt hatte, also wird dies hoffentlich jemand anderem helfen.
%Vor%Ich habe ein NSSegmentedControl auf meiner Benutzeroberfläche mit 4 Tasten. Das Steuerelement ist mit einer Methode verbunden, die abhängig davon, auf welches Segment geklickt wird, verschiedene Methoden aufruft:
%Vor%In der wakeFromNib-Methode wurde an das Segment 4 ein Menü angehängt. Ich möchte, dass dieses Menü angezeigt wird, wenn der Benutzer auf das Segment klickt. An dieser Stelle wird es nur fallen, wenn der Benutzer auf & amp; hält auf der Speisekarte fest. Aus meiner Online-Recherche ergibt sich dies aufgrund der damit verbundenen Handlung.
Ich arbeite gerade daran herum, indem ich Code benutze, um den Ursprungspunkt des Segment-Steuerelements zu erhalten und das Kontextmenü mit NSMenu %code% aufzurufen, aber das ist ziemlich hacktastisch und sieht schlecht aus im Vergleich zum Standardverhalten des Menü Dropdown-Menü unter der segmentierten Kontrollzelle.
Gibt es einen Weg, wie ich das Menü nach einem einzigen Klick herunterklappen kann, anstatt die Hacking-Kontext-Menü-Sache zu machen?
widthForSegment: gibt null zurück, wenn das Segment automatisch skaliert. Wenn Sie nicht über nicht dokumentierte APIs besorgt sind, gibt es ein rectForSegment:
Aber um die ursprüngliche Frage zu beantworten, ist es einfacher, das Menü sofort aufzurufen, indem Sie NSSegmentedCell ableiten und 0 für (wieder undokumentiert) zurückgeben.
Unterklasse NSSegmentedCell, überschreiben Sie die Methode unten und ersetzen Sie die Zellenklasse in IB. (Erfordert keine privaten APIs).
%Vor%