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 popUpContextMenu:withEvent:forView
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?
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 -rectForSegment:
-Methode)
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.