Domanda

Voglio mettere un controllo personalizzato all'interno della vista per la mia NSCollectionViewItem.

Diciamo che ho una consuetudine NSView chiamato BoxesView.BoxesView è solo una vista che richiama un numero predeterminato di scatole a suo parere. Quel numero di caselle si trova nel metodo init. Diciamo che ho impostato a 8.

Quando carico la vista raccolta, tutti gli altri controlli della vista fine lavoro, (pulsanti, cursori, ecc), ma la mia vista non disegnerà.

Se ho impostato un punto di interruzione nel metodo drawRect di BoxesView mostra che il numero di caselle per disegnare è 0! Se ho impostato un punto di interruzione nel mio metodo init dove ho impostato numBoxes a 8, dimostra che numBoxes fa realmente ottenere impostati a 8. Inoltre, il metodo init unica viene chiamato 1 volta anche se ci sono più righe nella visualizzazione raccolta.

Che cosa sto facendo di sbagliato?

Aggiorna

Sono stato in grado di ottenere questo lavoro impostando l'itemPrototype a carico da una XI ter, invece di essere nella stessa XI ter come NSCollectionViewItem. Questo è grande, tranne che funziona solo su 10.6 e non 10.5.

UPDATE 2

Quello che sto cercando di fare, è il mio bastone visualizzazione personalizzata all'interno della vista che già esisteva per il NSCollectionViewItem che già esiste. Quello che succede è la variabile membro mBoxWidth viene spazzata via ed è pari a zero in modo che quando si va a disegnare, non succede nulla.

@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

È stato utile?

Soluzione

I non ha attuato initWithCoder. Che correzioni tutto.

Altri suggerimenti

NSCollectionViewItem utilizza una visualizzazione prototipo, che è duplicato e cablata per ogni elemento oggetti rappresentati della collezione.

potrebbe passare attraverso tutti i problemi di fare un IBPlugin per la visualizzazione personalizzata (uno che espone la numberOfBoxesToDraw vincolante), ma questo è un dolore nel culo e non c'è un modo più semplice: collegamenti manuali.

Uso Attacchi manuale con NSCollectionView / Articolo

In primo luogo, subclcass NSCollectionViewItem, dice IB per utilizzare questa nuova sottoclasse, e assicuratevi di avere una presa in esso (come boxView) che è collegato alla visualizzazione personalizzata.

Avanti, sottoclasse NSCollectionView (impostato IB utilizzare questa sottoclasse) e di override - newItemForRepresentedObject: . In esso, per prima cosa chiama super (memorizzando il risultato a una variabile locale), quindi manualmente legano numero vostro "boxView" 's di scatole all'oggetto rappresentato con il tasto 'numberOfBoxes' si sta utilizzando nel modello.

Hai provato sovraccarico copyWithZone?

Sto cercando di indovinare il vostro articolo è sempre copiato e non direttamente init'd.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top