gpt4 book ai didi

objective-c - NSPopUpButton、绑定(bind)和缩短的生命周期

转载 作者:太空狗 更新时间:2023-10-30 03:35:17 24 4
gpt4 key购买 nike

我正在努力了解使用 NSPopUpButton 有多么困难。到目前为止,它是 Cocoa 中最难编程的用户元素(至少据我所知)。

我想到的用例如下:

  • 我有一个名为 Port 的类,它表示串行端口。
  • 属性中有一个名称字段。
  • 在 NSPopUpButton 中,我想显示每个端口的名称字段。
  • 当用户选择特定端口时,它会在弹出窗口中按预期打勾
  • 当用户随后点击连接按钮时,我可以确定选择了阵列中的哪些端口。
  • 我想使用绑定(bind)来实现这一点,因为我认为一旦我了解它,这将是更优雅的解决方案。

因此,在我的 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 来显示值,然后在选择时设置值标签(使用对象 Controller )。然而,尽管这很聪明,但它不适合我要实现的用例。所以我转向这里寻求帮助

中号

最佳答案

好的,与 NSPopUpButton 的绑定(bind)有点复杂,因为它需要两件事:对值的绑定(bind),以及选择其中一个值的绑定(bind)。使事情变得更加复杂的是,有几种完全合法的方法可以做到这一点,您选择哪一种完全取决于您的程序结构,在某种程度上还取决于个人喜好。

因此,为了获得值列表,您绑定(bind)了 content 属性。在您的情况下,您可能会将其绑定(bind)到 NSArrayControllerarrangedObjects 键。在此设置中,每个菜单项代表一个对象。默认情况下,菜单项的标题是通过对数组中的每个项目调用 description 返回的字符串。如果要为菜单标题使用不同的属性,还可以绑定(bind) contentValues 数组。只需确保您为 contentValues 指定的关键路径将 content 的关键路径作为其前缀(例如,您可以为 使用 arrangedObjects contentarrangedObjects.name for contentValues)

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

因此,在您的情况下,您可以将 selectedObject 绑定(bind)到 Controller 类上的 selectedSerialPort 属性。当用户单击“连接”按钮时,您只需引用 selectedSerialPort 属性。

关于objective-c - NSPopUpButton、绑定(bind)和缩短的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com