2016-04-02 10 views
1

NSTableViewの行をアニメーション化するために削除して挿入する行のNSMutableIndexSetを提供するAPI呼び出しを探しています。理想的には、古い配列と新しい配列を渡して結果の取り出しと挿入のインデックスを取得し、NSTableViewまたはそれに関連するプロトコルにそのようなものは表示されません。NSTableViewの行アニメーションの挿入と削除の方法

私はそうのように、beginUpdatesendUpdatesの間でアニメーションを実装したいと思います:初期化は2を取る

@property (strong, nonatomic) NSIndexSet *rowsToRemove; 
@property (strong, nonatomic) NSIndexSet *rowsToInsert; 

[_tableView removeRowsAtIndexes:rowsToRemove withAnimation:NSTableViewAnimationSlideUp]; 
[_tableView insertRowsAtIndexes:rowsToInsert withAnimation:NSTableViewAnimationSlideDown]; 

答えて

2

私は2つのプロパティで、このためのクラスを使用しています配列(古いものと新しいもの)を使用して、挿入する行と削除する行のインデックスを取得します。

- (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; 
} 
関連する問題