我有NSComboBox并且我没有使用数据源,而是使用内部列表功能。所以我用addItemsWithObjectValues
和addItemWithObjectValue
方法填充它。
我的问题是,在使用addItemWithObjectValue
添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?
答案 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
并以有序方式重新添加它们。