当前位置:  开发笔记 > IOS > 正文

NSPopUpButton,Bindings和缩短寿命

如何解决《NSPopUpButton,Bindings和缩短寿命》经验,为你挑选了2个好方法。

我试图弄清楚使用NSPopUpButton是多么困难.它是迄今为止在Cocoa中编程最困难的用户元素(至少就我所发现的而言).

我想到的用例如下:

我有一个名为Port的类,代表一个串口.

其中的属性是名称字段.

在NSPopUpButton中,我想显示每个端口的名称字段.

当用户选择特定端口时,它会在弹出窗口中标记为预期的勾选

当用户随后点击连接按钮时,我可以确定选择了阵列中的哪个端口.

我想用绑定来实现这一点,因为我认为一旦我了解它,它将是更优雅的解决方案.

因此,在我的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来显示值,然后在选择上设置标签的值(使用对象控制器).但是,尽管这很聪明,但它不适合我试图实现的用例.所以我转到这里寻求帮助

中号



1> Alex..:

好的,与它的绑定NSPopUpButton有点复杂,因为它需要两件事:对值的绑定,以及为其中一个值选择的绑定.更复杂的是,有几种完全合法的方式,你选择哪一种完全取决于你的程序结构,在某种程度上取决于个人偏好.

因此,为了获取值列表,您绑定content属性.在你的情况下,你可能会将它绑定到一个arrangedObjectsNSArrayController.在此设置中,每个菜单项代表一个对象.默认情况下,菜单项的标题是通过调用description数组中的每个项返回的字符串.如果要为菜单标题使用不同的属性,还可以绑定contentValues数组.只需确保您指定contentValues的密钥路径具有content作为其前缀的密钥路径(例如,您可能使用arrangedObjectsfor contentarrangedObjects.namefor contentValues)

这将为您提供表示对象的菜单项.接下来你需要的是识别所选择的一种方法.有三种不同的绑定可以使用:selectedIndex,selectedObjectselectedValue.它们分别表示用户选择的数组对象的索引,对象值(content数组中的一个对象),以及所选项的字符串标题(contentValues如果绑定该属性,则表示数组中的一个对象)).

因此,在您的情况下,您可能绑定selectedObjectselectedSerialPort控制器类上的属性.当用户单击"连接"按钮时,您只需要引用该selectedSerialPort属性.



2> Abizern..:

您可以在此处下载示例Xcode项目.这样我就能尽可能接近你的描述.

重要的是要查看数组控制器,AppController和弹出框之间的连接.

基本上,这只是表明亚历克斯所说的.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有