给大纲的根行观看不同的背景颜色

时间:2009-06-14 19:49:24

标签: objective-c cocoa

我有一些代码可以执行此操作(在下面)但是我遇到一个错误,它停止工作,错误是''MyOutlineView'可能无法响应'-objectArray'',它说它需要声明但是我不知道我应该在Header File中使用什么代码来声明它。

守则:

- (void) outlineView: (NSOutlineView *) aView
willDisplayCell: (id) aCell
forTableColumn: (NSTableColumn *)aColumn
item: (id) anItem
{
id rootObj = anItem;
unsigned row = [aView rowForItem:anItem];

[aCell setDrawsBackground: YES];

while ([aView levelForRow:row] != 0) {
row --;
rootObj = [aView itemAtRow:row];
}

// The colours here are foul and ugly. Use something else, for
// God's sake!
if ([[self objectArray] indexOfObject:rootObj] % 2)
[aCell setBackgroundColor: [NSColor yellowColor]];
else
[aCell setBackgroundColor: [NSColor blueColor]];
} 

2 个答案:

答案 0 :(得分:3)

我不确定我是否100%肯定你在这里尝试做什么,但在我看来你可以简单地替换它:

  if ([[self objectArray] indexOfObject:rootObj] % 2)
    [aCell setBackgroundColor: [NSColor yellowColor]];
  else
    [aCell setBackgroundColor: [NSColor blueColor]];

if ([aView rowForItem:rootObj] % 2) 
  [aCell setBackgroundColor: [NSColor yellowColor]];
else
  [aCell setBackgroundColor: [NSColor blueColor]];

你的rootObj是大纲中的一个项目,就像anItem一样,这应该告诉你root项目在哪一行。当然,也许我不明白你在那里找到的是什么。

答案 1 :(得分:1)

objectArray是MyOutlineView的实例变量吗?如果是这样,只需直接访问它,如下所示:

if( [objectArray indexOfObject:rootObj] % 2 )
...

代码[self objectArray]试图调用一个名为objectArray的方法,而不是引用ivar objectArray。

修改 以上假设objectArray是MyOutlineView的实例变量,如:

@interface MyOutlineView {
    NSArray* objectArray;
}