objective-c – 对NSPopUpButton进行排序

objective-c – 对NSPopUpButton进行排序,第1张

概述我有一个需要在NSPopUpButton中显示的元素列表.我希望PopUp按钮按字母顺序排序显示列表.此外,列表中有一个新的MenuItem,它将从文本字段中拾取一个字符串并将其插入到PopUp按钮中.所以,我想问两个问题: >在NSPopUpButton中按排序顺序显示元素列表的正确方法是什么? >我应该如何处理向NSPopUpButton插入新元素以便维护排序顺序? 如果您使用NSArrayC 我有一个需要在NSPopUpbutton中显示的元素列表.我希望PopUp按钮按字母顺序排序显示列表.此外,列表中有一个新的MenuItem,它将从文本字段中拾取一个字符串并将其插入到PopUp按钮中.所以,我想问两个问题:

>在NSPopUpbutton中按排序顺序显示元素列表的正确方法是什么?
>我应该如何处理向NSPopUpbutton插入新元素以便维护排序顺序?

解决方法 如果您使用NSArrayController来填充d出按钮(或者更确切地说,它的菜单),那么您只需定义一个排序描述符来处理排序.

让阵列控制器第一次使用d出按钮可能有点棘手,但如果将d出按钮的内容绑定到数组控制器的arrangeObjects然后将内容值绑定到模型对象的合适字符串属性,则应该没事的.

然后,添加新项目只需要通过阵列控制器添加项目.

因此,如果您不熟悉NSArrayController类和绑定,以下是如何在Interface Builder中执行此 *** 作的简短说明.假设您的元素具有名为name的字符串属性.

>在您的nib文件的所有者(例如,应用程序委托)中创建一个(可变的)数组属性来保存您的元素.
>在Interface Builder中创建一个数组控制器对象.
>将其内容数组绑定到刚刚创建的数组属性.可以在Xcode的Bindings Inspector(Cmd-Opt-7)中设置绑定.
>向窗口添加d出按钮.
>将d出按钮的内容绑定设置为数组控制器的arrangeObjects控制器键.这是该绑定的默认选项.
>将d出按钮的内容值绑定到数组控制器的arrangeObjects控制器键和名称模型键路径.这将在菜单中提供正确的文本.
>在代码中的某处,创建一个排序描述符并在数组控制器上设置它(使用setSortDescriptors:方法).为此,您可能希望在文件所有者上定义一个插座来保存阵列控制器.
>要在d出按钮中添加新元素,请使用数组控制器的add:方法.

这应该让你使用最少的自己的代码,以及一点点Interface Builder魔术.

对于相当简单的UI元素,绑定可以真正节省大量工作.更多关于他们here.

编辑添加一个例子:

有关如何完成此 *** 作的示例,请考虑具有应用程序委托的应用程序,该应用程序委托具有数据属性,字典数组以及名称属性.请注意,这是一个比您的示例更深的抽象级别,其中数组只包含单个字符串.就个人而言,我更喜欢这样.

self.data = [NSMutableArray arrayWithObjects:             [NSDictionary dictionaryWithObjectsAndKeys:@"Flowers",@"name",nil],[NSDictionary dictionaryWithObjectsAndKeys:@"Animals",[NSDictionary dictionaryWithObjectsAndKeys:@"Trees",nil];// Sort the array controller Alphabetically by the name propertyNSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];self.arrayController.sortDescriptors = [NSArray arrayWithObject:sd];
总结

以上是内存溢出为你收集整理的objective-c – 对NSPopUpButton进行排序全部内容,希望文章能够帮你解决objective-c – 对NSPopUpButton进行排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1001054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存