如何获取 NSTableView 行动画的插入和删除
How to get Insertions and Deletions for NSTableView row animations
我正在寻找一个 API 调用,它提供 NSMutableIndexSet
行来删除和插入 NSTableView
中的动画行。理想情况下,我应该传递一个旧数组和一个新数组,以获得删除和插入索引的结果,我在 NSTableView
或相关协议中看不到任何类似的东西。
我想在 beginUpdates
和 endUpdates
之间实现动画,例如:
[_tableView removeRowsAtIndexes:rowsToRemove withAnimation:NSTableViewAnimationSlideUp];
[_tableView insertRowsAtIndexes:rowsToInsert withAnimation:NSTableViewAnimationSlideDown];
我为此使用了 class,它具有两个属性:
@property (strong, nonatomic) NSIndexSet *rowsToRemove;
@property (strong, nonatomic) NSIndexSet *rowsToInsert;
初始化需要两个数组(旧的和新的),我用它们来获取要插入的行和要删除的行的索引:
- (instancetype) initWithOldArray:(NSArray *)oldArray newArray:(NSArray *)newArray
{
self = [super init];
if (self) {
//Get a list of deletion indices
NSMutableIndexSet *rowsToRemove = [NSMutableIndexSet new];
NSUInteger numOldItems = oldArray.count;
for (NSUInteger i = 0; i < numOldItems; i++) {
id item = oldArray[i];
if (![newArray containsObject:item]) {
[rowsToRemove addIndex:i];
}
}
//Get a list of insertion indices
NSMutableIndexSet *rowsToInsert = [NSMutableIndexSet new];
NSUInteger numNewItems = newArray.count;
for (NSUInteger i = 0; i < numNewItems; i++) {
id item = newArray[i];
if (![oldArray containsObject:item]) {
[rowsToInsert addIndex:i];
}
}
self.rowsToRemove = rowsToRemove;
self.rowsToInsert = rowsToInsert;
}
return self;
}
我正在寻找一个 API 调用,它提供 NSMutableIndexSet
行来删除和插入 NSTableView
中的动画行。理想情况下,我应该传递一个旧数组和一个新数组,以获得删除和插入索引的结果,我在 NSTableView
或相关协议中看不到任何类似的东西。
我想在 beginUpdates
和 endUpdates
之间实现动画,例如:
[_tableView removeRowsAtIndexes:rowsToRemove withAnimation:NSTableViewAnimationSlideUp];
[_tableView insertRowsAtIndexes:rowsToInsert withAnimation:NSTableViewAnimationSlideDown];
我为此使用了 class,它具有两个属性:
@property (strong, nonatomic) NSIndexSet *rowsToRemove;
@property (strong, nonatomic) NSIndexSet *rowsToInsert;
初始化需要两个数组(旧的和新的),我用它们来获取要插入的行和要删除的行的索引:
- (instancetype) initWithOldArray:(NSArray *)oldArray newArray:(NSArray *)newArray
{
self = [super init];
if (self) {
//Get a list of deletion indices
NSMutableIndexSet *rowsToRemove = [NSMutableIndexSet new];
NSUInteger numOldItems = oldArray.count;
for (NSUInteger i = 0; i < numOldItems; i++) {
id item = oldArray[i];
if (![newArray containsObject:item]) {
[rowsToRemove addIndex:i];
}
}
//Get a list of insertion indices
NSMutableIndexSet *rowsToInsert = [NSMutableIndexSet new];
NSUInteger numNewItems = newArray.count;
for (NSUInteger i = 0; i < numNewItems; i++) {
id item = newArray[i];
if (![oldArray containsObject:item]) {
[rowsToInsert addIndex:i];
}
}
self.rowsToRemove = rowsToRemove;
self.rowsToInsert = rowsToInsert;
}
return self;
}