Я хочу поместить настраиваемый элемент управления в представление для моего NSCollectionViewItem.
Допустим, у меня есть пользовательский NSView с именем BoxesView. BoxesView — это просто представление, которое рисует заданное количество полей в своем представлении. Это количество ящиков задается в методе init. Допустим, я установил его на 8.
Когда я загружаю представление коллекции, все остальные элементы управления в представлении работают нормально (кнопки, ползунки и т. д.), но мое представление не отображается.
Если я устанавливаю точку останова в методе drawRect BoxesView, он показывает, что количество блоков для рисования равно 0! Если я устанавливаю точку останова в своем методе инициализации, где я устанавливаю numBoxes на 8, это показывает, что numBoxes действительно устанавливается на 8. Кроме того, метод инициализации вызывается только 1 раз, даже если в представлении коллекции есть несколько строк.
Что я делаю неправильно?
ОБНОВЛЕНИЕ
Я смог заставить это работать, установив itemPrototype для загрузки из xib вместо того, чтобы находиться в том же xib, что и NSCollectionViewItem. Это здорово, за исключением того, что работает только на 10.6, а не на 10.5.
ОБНОВЛЕНИЕ 2
Что я пытаюсь сделать, так это вставить свое собственное представление в представление, которое уже существует для уже существующего NSCollectionViewItem. Что происходит, так это то, что переменная-член mBoxWidth сбрасывается и становится равной нулю, поэтому, когда она начинает ее рисовать, ничего не происходит.
@implementation DumbView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
mBoxWidth = 3;
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
NSRect bounds = self.bounds;
[[NSColor redColor]set];
[NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)];
}
@конец
init
какого класса вы говорите? Откуда отправляется сообщениеinit
? Убедились ли вы, что проверяете свойствоnumBoxes
того же представления, которое находится в элементе представления коллекции? - person Peter Hosey   schedule 25.08.2010