Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top