Question

Je veux mettre un contrôle personnalisé dans la vue de mon NSCollectionViewItem.

Disons que j'ai une coutume NSView appelé BoxesView.BoxesView est juste une vue qui attire un nombre prédéterminé de boîtes à son point de vue. Ce nombre de cases est défini dans la méthode init. Disons que je l'ai mis à 8.

Quand je charge la vue de la collecte, tous les autres contrôles de l'amende de travail, vue (boutons, curseurs, etc.), mais mon avis ne dessinera pas.

Si je mets un point d'arrêt dans la méthode drawRect de BoxesView il montre que le nombre de boîtes à tirer est 0! Si je mets un point d'arrêt dans ma méthode init où je mis numBoxes à 8, il montre que numBoxes ne se préparent en fait à 8. En outre, la méthode d'initialisation obtient seulement appelé 1 fois, même si il y a plusieurs lignes dans la vue de la collection.

Qu'est-ce que je fais mal?

UPDATE

Je suis en mesure d'obtenir ce travail en réglant le itemPrototype à la charge d'un xib au lieu d'être dans le même que le xib NSCollectionViewItem. Cela tombe bien, sauf qu'il ne fonctionne que sur 10,6 et non 10,5.

MISE À JOUR 2

Ce que je suis en train de faire, est en tenir mon point de vue personnalisé dans la vue qui existait déjà pour le NSCollectionViewItem qui existe déjà. Ce qui se passe est la variable membre mBoxWidth s'époustouflé et est égal à zéro alors quand il va dessiner, rien ne se passe.

@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

Était-ce utile?

La solution

Je n'a pas mis en initWithCoder. Que tout les correctifs.

Autres conseils

NSCollectionViewItem utilise une vue prototype, qui est dupliqué et câblé pour chaque élément dans les objets représentés de la collection.

peut passer par toutes la peine de faire une IBPlugin pour votre vue personnalisée (qui expose la liaison numberOfBoxesToDraw), mais qui est une douleur dans le cul et il y a un moyen plus facile: les liaisons manuelles.

Manuel avec l'aide Manchettes NSCollectionView / Point

D'abord, subclcass NSCollectionViewItem, dit IB à utiliser cette nouvelle sous-classe, et assurez-vous que vous avez une prise en elle (comme boxView) qui est connecté à votre vue personnalisée.

Ensuite, la sous-classe NSCollectionView (IB réglé pour utiliser cette sous-classe) et override - newItemForRepresentedObject: . Dans ce document, vous devez d'abord appeler super (mémoriser le résultat à une variable locale), puis associez manuellement le numéro de votre « boxView » des boîtes à l'objet représenté avec la touche « numberOfBoxes » que vous utilisez dans votre modèle.

Avez-vous essayé la surcharge copyWithZone?

Je devine que votre article est copié et s'init'd pas directement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top