事实上,我最初的断言是正确的——即,使用底层的内容数组,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
事不宜迟,通过分配一个NSMatrix
具有至少 1 列所需高度的 n 行的初始大小,以下是子类中的两种方法,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
with 数组索引并一举影响 NSMatrix 的数组(with insertObjects:atArrangedObjectIndexes:
and removeObjectsAtArrangedObjectIndexes:
),但这似乎比它的价值更麻烦。
从数组中插入/删除连续行的代码留给读者作为(更容易)练习;-)