使用内部列表时如何对NSComboBox上的条目进行排序

时间:2014-07-16 16:30:35

标签: objective-c macos cocoa

我有NSComboBox并且我没有使用数据源,而是使用内部列表功能。所以我用addItemsWithObjectValuesaddItemWithObjectValue方法填充它。

我的问题是,在使用addItemWithObjectValue添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?

2 个答案:

答案 0 :(得分:1)

在不使用数据源的情况下在NSComboBox中维护排序。首先,当您最初添加项目时,您必须对其进行排序:

// Using NSComparator because it is needed later on
NSComparator sort = ^(id obj1, id, obj2) {
    return [obj1 caseInsensitiveCompare: obj2];
};

[comboBox addItemsWithObjectValues: [titles sortedArrayUsingComparator: sort]];

接下来,当您希望在添加单个项目时保持排序:

NSArray *objectValues = comboBox.objectValues;
[comboBox insertItemWithObjectValue: newTitle 
                            atIndex: [objectValues indexOfObject: newTitle
                                                   inSortedRange: NSMakeRange(0, objectValues.count) 
                                                         options: NSBinarySearchingInsertionIndex 
                                                 usingComparator: sort]];

这可以通过找到适当的索引来插入新项目并在该索引处插入项目。

答案 1 :(得分:0)

您需要预先计算新项目在列表中的位置,并使用- (void)insertItemWithObjectValue:(id)anObject atIndex:(NSInteger)index将它们插入相应的索引。

您无法对内部列表重新排序。您需要使用- (void)removeAllItems并以有序方式重新添加它们。