Pregunta

Quiero poner un control personalizado dentro de la vista para mi NSCollectionViewItem.

Digamos que tengo una costumbre NSView llama BoxesView.BoxesView es sólo una vista que atrae un número predeterminado de cajas en su opinión. Ese número de cajas se establece en el método init. Digamos que me puse a 8.

Cuando cargo la vista de colección, todos los otros controles de la visión fina de trabajo, (botones, barras de desplazamiento, etc.) pero mi punto de vista no se dibujará.

Si fijo un punto de interrupción en el método de drawRect BoxesView muestra que el número de cajas de dibujar es 0! Si fijo un punto de interrupción en mi método init donde hice numBoxes a 8, muestra que en realidad hace numBoxes consiguen el sistema a 8. Además, el método init sólo se hace llama 1 vez a pesar de que hay varias filas en la vista de colección.

¿Qué estoy haciendo mal?

Actualizar

Yo era capaz de conseguir este trabajo mediante el establecimiento de la itemPrototype a la carga de un xib en lugar de estar en la misma xib como el NSCollectionViewItem. Esto es muy bueno, excepto que sólo funciona en 10.6 y 10.5 no.

ACTUALIZACIÓN 2

Lo que estoy tratando de hacer, es meter la vista personalizada dentro de la opinión de que ya existía para la NSCollectionViewItem que ya existe. Lo que sucede es la variable miembro mBoxWidth consigue arrancado y es cero por lo que cuando se va a dibujar, no pasa nada.

@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)];
}

@end

¿Fue útil?

Solución

Yo no implementó initWithCoder. Eso lo arregla todo.

Otros consejos

NSCollectionViewItem utiliza una vista de prototipo, que se duplica y se cablea de cada elemento de los objetos representados de la colección.

podría pasar por la molestia de hacer una IBPlugin para la vista personalizada (uno que expone la unión numberOfBoxesToDraw), pero eso es un dolor en el culo y no hay una manera más fácil: fijaciones manuales.

Uso de enlaces manual con NSCollectionView / artículo

En primer lugar, subclcass NSCollectionViewItem, dice IB para utilizar esta nueva subclase, y asegúrese de que tiene una salida en él (como boxView) que está conectado a la vista personalizada.

A continuación, subclase NSCollectionView (conjunto de IB para utilizar esta subclase) y override - newItemForRepresentedObject: . En ella, primero llama a super (almacenando el resultado en una variable local), a continuación, se unen de forma manual el número de cajas al objeto representado su "boxView" 's con la tecla 'numberOfBoxes' que está utilizando en su modelo.

¿Usted ha intentado sobrecargar copyWithZone?

supongo que su artículo está siendo copiado y no directamente init'd.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top