Предоставление корневого ряда структуры Outline Другой цвет фона - PullRequest
0 голосов
/ 14 июня 2009

У меня есть некоторый код для этого (который приведен ниже), но я получаю одну ошибку, которая останавливает его работу, и ошибка '' MyOutlineView 'может не отвечать на' -objectArray '', она говорит, что она должна быть объявлена но я не знаю, какой код мне следует использовать в заголовочном файле, чтобы объявить его.

Код:

- (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 ]

3 голосов
/ 18 июня 2009

Я не уверен, что на 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, и он должен сказать вам, в какой строке находится этот корневой элемент. Конечно, возможно, я не понимаю, что вы пытаетесь найти там.

1 голос
/ 15 июня 2009

Является ли objectArray переменной экземпляра MyOutlineView? Если это так, просто обратитесь к нему напрямую, как это:

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

Код [self objectArray] пытается вызвать метод objectArray, а не ссылку на ivar objectArray.

Edit: Выше предполагается, что objectArray является переменной экземпляра MyOutlineView, например:

@interface MyOutlineView {
    NSArray* objectArray;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...