2016-04-02 24 views
1

NSTableView'da satırları hareketlendirmek ve eklemek için NSMutableIndexSet satır içeren bir API çağrısı arıyorum. İdeal olarak, ben sonuçlanan çıkarıp takmak endekslerini almak için, eski ve yeni bir dizi geçmesi gerektiğini ve ben NSTableView veya ilgili protokollerde böyle bir şey görmüyorum.NSTableView satır animasyonları için Ekleme ve Silme işlemleri nasıl yapılır

Öyle gibi beginUpdates ve endUpdates arasındaki animasyonlar uygulamak istiyorum

: Bunun için bir sınıf kullanıyorum

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

cevap

2

iki niteliğin:

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

başlatma iki alır Ben eklemek için satır ve satırlar için endekslerini almak için kullanabilirsiniz (eski ve yeni) diziler, kaldırmak için:

- (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; 
} 
İlgili konular