首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMatrix绑定混乱

NSMatrix绑定混乱
EN

Stack Overflow用户
提问于 2014-08-01 09:30:56
回答 1查看 64关注 0票数 0

我想使用NSMatrix来表示一个跨6天工作周(6行)的员工(列)的调度矩阵。仅供参考,由于NSTableView不支持逐个单元格的拖放,我不得不转而使用NSMatrix。真扫兴。

无论如何,如果我想使用Cocoa绑定,那么我的contentNSArray需要在NSMatrix上水平地工作。

如果我有一个雇员,我的数组将包含6个项目。明白了。但是,如果我添加第二个雇员,则雇员1的数据需要占用偶数组索引(0-2-4-6-8-10),而雇员2的数据占用奇数组索引(1-3-5-7-9-11)。

如果我现在想删除employee 1,那么我需要按该顺序删除第10,8,6,4,2,0项!

太棒了。

我没看错吧?还有其他人不得不满足于这种疯狂吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-02 01:03:03

实际上,我最初的断言是正确的-也就是说,对于内容的底层数组,NSMatrix从左到右然后从上到下排列内容。5x2矩阵中由10个元素组成的数组将使用以下索引进行布局:

代码语言:javascript
复制
 0  1  2  3  4
 5  6  7  8  9

所以我和你分享几个代码片段...例如,对此调用[self insColAtIndex:self.matrix.numberOfColumns]会产生一个新矩阵,并将新项"X“附加到最后一列:

代码语言:javascript
复制
 0  1  2  3  4  X
 5  6  7  8  9  X

简单地说,分配一个初始大小的NSMatrix,其中至少有一列是所需的n行高度,下面是一个子类NSArrayController中的两个方法,它们可以使受控NSMatrix及其内容数组协同工作:

代码语言:javascript
复制
// 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:),但这似乎比它值得的麻烦更多。

将插入/删除数组中连续行的代码留给读者(容易得多) ;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25071520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档