Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Xcode工具栏中使用类似菜单的方式进行分段控件_Xcode_Macos_Cocoa_Nssegmentedcontrol_Segmentedcontrol - Fatal编程技术网

如何在Xcode工具栏中使用类似菜单的方式进行分段控件

如何在Xcode工具栏中使用类似菜单的方式进行分段控件,xcode,macos,cocoa,nssegmentedcontrol,segmentedcontrol,Xcode,Macos,Cocoa,Nssegmentedcontrol,Segmentedcontrol,我想在我的OSX应用程序中添加一个带有Xcode工具栏菜单的分段控件。它将在三个屏幕之间切换,并且还需要在每个屏幕中以菜单的形式提供一些选项 当我添加菜单时,标准分段控件不允许“选择一个”模式 我很容易就完成了你想要的东西 我将分段控件的trackingMode设置为nssegmentswitchtrackinginstantial 然后我为分段控件创建了一个iAction: - (IBAction)selectionChanged:(NSSegmentedControl *)sender {

我想在我的OSX应用程序中添加一个带有Xcode工具栏菜单的分段控件。它将在三个屏幕之间切换,并且还需要在每个屏幕中以菜单的形式提供一些选项


当我添加菜单时,标准分段控件不允许“选择一个”模式

我很容易就完成了你想要的东西

我将分段控件的
trackingMode
设置为
nssegmentswitchtrackinginstantial

然后我为分段控件创建了一个iAction:

- (IBAction)selectionChanged:(NSSegmentedControl *)sender {
    [NSMenu popUpContextMenu:[NSApp mainMenu] withEvent:[NSApp currentEvent] forView:sender];
}
然后它看起来如下所示:


此功能是内置的。在代码中,您只需使用
-setMenu:forSegment:
方法
NSSegmentedControl
(或
NSSegmentedCell
)。在Interface Builder中,只需从对象库中拖动一个菜单并将其放置在相应的段上


要允许在单击时选择带有菜单的段,您可能需要使用
NSSegmentedControl
的自定义子类,该子类将覆盖
-startTrackingAt:inView:
以在调用super之前将段设置为selected。

这是解决问题的最简单的方法。如果你想在那里做任何更特别的事情,你必须对分段控件进行子类化,然后从那里开始工作。看起来我无论如何都应该滚动我自己的子类来实现这种行为,用标准控件无法实现所需的行为。。。