実際、私の最初の主張は正しかったです。つまり、コンテンツの基盤となる配列を使用して、NSMatrix
そのコンテンツを左から右、次に上から下に配置するということです。5x2 行列の 10 要素の配列は、次のインデックスで配置されます。
0 1 2 3 4
5 6 7 8 9
そこで、いくつかのコード スニペットを共有します。たとえば、[self insColAtIndex:self.matrix.numberOfColumns]
この結果で を呼び出すと、最後の列に新しいアイテム「X」が追加された新しいマトリックスが生成されます。
0 1 2 3 4 X
5 6 7 8 9 X
これ以上苦労することなく、n 行の目的の高さの少なくとも 1 列の初期サイズを割り当てることで、制御された配列とそのコンテンツ配列を連携させるNSMatrix
サブクラスの 2 つのメソッドを次に示します。NSArrayController
NSMatrix
// insert NSMatrix column at index (zero-based)
-(void)insColAtIndex:(NSInteger)index
{
NSInteger colCount = self.matrix.numberOfColumns;
if (index<0 || index>colCount)
return;
NSInteger rowCount = self.matrix.numberOfRows;
[self.matrix addColumn];
for (NSInteger i=0; i<rowCount; i++)
[self insertObject:[[NSCell alloc] init] atArrangedObjectIndex:index+colCount*i+i];
}
// remove NSMatrix column at index (zero-based)
-(void)delColAtIndex:(NSInteger)index
{
NSInteger colCount = self.matrix.numberOfColumns;
if (index<0 || index>=colCount)
return;
NSInteger rowCount = self.matrix.numberOfRows;
[self.matrix removeColumn:index];
for (NSInteger i=rowCount-1; i>=0; i--)
[self removeObjectAtArrangedObjectIndex:index+colCount*i];
}
配列インデックスを使用して を作成しNSMutableIndexSet
、NSMatrix の配列に ( および を使用しinsertObjects:atArrangedObjectIndexes:
てremoveObjectsAtArrangedObjectIndexes:
) 一挙に影響を与えることができたことに気付きましたが、それは価値があるよりも面倒に思えました。
配列から連続する行を挿入/削除するためのコードは、読者のための(はるかに簡単な)演習として残されています;-)