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