Objective c 使用内部列表时如何对NSCOMBOX上的条目进行排序
我有一个,我不使用数据源,而是使用内部列表功能。所以我用Objective c 使用内部列表时如何对NSCOMBOX上的条目进行排序,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我有一个,我不使用数据源,而是使用内部列表功能。所以我用addItemsWithObjectValues和additemswithobjectvalue方法填充它 我的问题是,在使用addItemWithObjectValue添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?在不使用数据源的情况下在NSComboBox中保持排序。首先,当您最初添加项目时,必须按如下方式对其进行排序: // Using NSComparator because it is needed later o
addItemsWithObjectValues
和additemswithobjectvalue
方法填充它
我的问题是,在使用
addItemWithObjectValue
添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?在不使用数据源的情况下在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]];
这是通过找到合适的索引来插入新项目,并在该索引处插入项目来实现的。您需要预先计算新项目在列表中的位置,并使用
-(void)insertItemWithObjectValue:(id)anObject atIndex:(NSInteger)index
将它们插入到合适的索引处
不能对内部列表重新排序。您需要使用-(void)removeAllItems
,然后按顺序重新添加它们