我正在努力解决使用NSPopUpButton的难度。它是迄今为止在Cocoa中编程最困难的用户元素(至少就我所发现的而言)。
我想到的用例如下:
因此,在我的AppController.h中,我期待两个属性,我可以将它们创建为属性并合成:
NSMutableArray *allPorts;
Port *currentlySelectedPort;
我的.m中的一个动作:
-(void)didSelectConnect:(id)sender{
NSLog(@"Selected port name is:%@",[currentlySelectedPort name]);
}
在Port.h中我有
NSString *name;
NSString *baudRate;
... etc ...
我创建了一个简单的项目,它只包含一个弹出窗口(和一个标签),并且在各篇文章之后,我已经设法用一个元素填充NSMutableArray,然后我使用ArrayController来显示值,然后在选择上设置值标签(使用对象控制器)。但是,尽管这很聪明,但它不适合我试图实现的用例。所以我转到这里寻求帮助
中号
答案 0 :(得分:12)
好的,与NSPopUpButton
的绑定有点复杂,因为它需要两件事:绑定值,以及选择其中一个值的绑定。更复杂的是,有几种完全合法的方式,你选择哪一种完全取决于你的程序结构,在某种程度上取决于个人喜好。
因此,为了获取值列表,您绑定content
属性。在您的情况下,您可能会将其绑定到arrangedObjects
的{{1}}键。在此设置中,每个菜单项代表一个对象。默认情况下,菜单项的标题是通过在数组中的每个项目上调用NSArrayController
返回的字符串。如果要为菜单标题使用不同的属性,还可以绑定description
数组。只需确保您为contentValues
指定的密钥路径具有contentValues
作为其前缀的密钥路径(例如,您可以content
使用arrangedObjects
和content
arrangedObjects.name
)
这将为您提供表示对象的菜单项。接下来你需要的是识别所选择的一种方法。您可以使用三种不同的绑定:contentValues
,selectedIndex
和selectedObject
。它们分别表示用户选择的数组对象的索引,对象值(selectedValue
数组中的一个对象),以及所选项的字符串标题({中的一个对象)如果绑定该属性,则为{1}}数组。)
因此,在您的情况下,您可以将content
绑定到控制器类的contentValues
属性。当用户单击“连接”按钮时,您只需要引用selectedObject
属性。
答案 1 :(得分:6)
您可以下载sample Xcode project here。这样我就能尽可能地了解你的描述。
重要的是查看数组控制器,AppController和弹出框之间的连接。
基本上,这只是表明亚历克斯所说的。