Пользовательский контроль в NscollectionViewItem
-
01-10-2019 - |
Вопрос
Я хочу поставить пользовательский контроль внутри вида для моего NscollectionViewItem.
Позвольте сказать, что у меня есть пользовательский NSView под названием BoxesView.BoxesView - это просто представление, которое рисует заранее определенное количество ящиков в его представлении. Это количество коробок устанавливается в методе init. Позвольте сказать, что я установил его на 8.
Когда я загружаю вид сбора, все другие элементы управления в представлении работает нормально, (кнопки, ползунки и т. Д.) Но мой вид не будет рисовать.
Если я установлю точку останова в методе лечения BoxesView, он показывает, что количество коробок для рисования 0! Если я установлю точку останова в моем методе INIT, где я устанавливаю Numboxes до 8, он показывает, что Numboxes действительно устанавливается на 8. Кроме того, метод init только вызывается 1 раз, хотя в конце коллекции есть несколько строк.
Что я делаю неправильно?
ОБНОВИТЬ
Я смог заняться этим работать, установив элементPrototype загрузить из 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)];
}
@конец
Решение
Я не реализовал INITWITHCODER. Это исправляет все.
Другие советы
NscollectionViewItem использует прототип вид, который дублируется и подключен к каждому элементу в представленных объектах коллекции.
Ты мог Пройдите все неприятности, чтобы сделать IBPLUGIN для вашего пользовательского вида (тот, который обнажает numberofboxboxeStoDRaw Binding), но это боль в заднице, и это более простым способом: ручные привязки.
Использование ручных привязки с NscolluctView / item
Во-первых, Subclcass NscollectionViewItem, сообщите IB для использования этого нового подкласса и убедитесь, что у вас есть выход в нее (например, BoxView), который подключен к вашему пользовательскому представлению.
Затем подкласс NscollectionView (установите IB для использования этого подкласса) и переопределения -NEWITEMFRREPRESENTEDOBJECT:. Отказ В нем вы впервые позвоните супер (сохраняя результат в локальную переменную), затем вручную связывающую количество коробок «BoxView» к представленному объекту с ключом «NUMBOUFBOXBES», которые вы используете в вашей модели.
Вы пытались перегрузить копию копирования?
Я предполагаю, что ваш товар копируется и не напрямую init'd.