2010-08-25 6 views
0

Je souhaite placer un contrôle personnalisé dans la vue de mon NSCollectionViewItem. Disons que j'ai un NSView personnalisé appelé BoxesView.BoxesView est juste une vue qui dessine un nombre prédéterminé de boîtes dans sa vue. Ce nombre de boîtes est défini dans la méthode init. Disons que je l'ai mis à 8.Contrôle personnalisé dans NSCollectionViewItem

Lorsque je charge la vue de collection, toutes les autres commandes de la vue fonctionnent correctement (boutons, curseurs, etc.) mais ma vue ne dessine pas.

Si je définis un point d'arrêt dans la méthode drawRect de BoxesView, cela montre que le nombre de boîtes à dessiner est 0! Si je mets un point d'arrêt dans ma méthode init où je mets numBoxes à 8, cela montre que numBoxes est en réalité mis à 8. De plus, la méthode init est appelée 1 fois même s'il y a plusieurs lignes dans la vue de collection.

Qu'est-ce que je fais mal?

MISE À JOUR

j'ai pu obtenir ce travail en réglant le itemPrototype à charger à partir d'un xib au lieu d'être dans le même que le xib NSCollectionViewItem. C'est génial, 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 coller mon avis personnalisé dans la vue qui existait déjà pour le NSCollectionViewItem qui existe déjà. Qu'est-ce qui se passe est la variable membre mBoxWidth est emporté et est nul alors quand il va le 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

+0

De quelle méthode 'init' faites-vous référence?D'où le message 'init' est-il envoyé? Avez-vous vérifié que vous inspectez la propriété 'numBoxes' de la même vue que celle de l'élément de vue de collection? –

+0

Je parlais de la méthode d'initialisation BoxesView. Il est appelé par la plume qui est en cours de chargement dans l'un de mes contrôleurs. Le contrôleur est le propriétaire du NSCollectionView – Randall

+0

Veuillez modifier votre question pour inclure le code que vous utilisez pour configurer la vue de collection, pour charger la vue de l'élément et pour créer et configurer des éléments de vue de collection. –

Répondre

1

Je n'ai pas implémenté initWithCoder. Cela fixe tout.

0

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

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

En utilisant Manchettes Manuel avec NSCollectionView/article

D'abord, subclcass NSCollectionViewItem, dites 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, sous-classe NSCollectionView (définissez IB pour utiliser cette sous-classe) et remplacez -newItemForRepresentedObject:. Dans celui-ci, vous appellerez d'abord super (en stockant le résultat dans une variable locale), puis lierz manuellement le nombre de boîtes de votre "boxView" à l'objet représenté avec la clé "numberOfBoxes" que vous utilisez dans votre modèle.

+0

Ce que le problème finit par être, c'est que les valeurs par défaut que je donne à mes valeurs membres sont toutes mises à zéro. Donc, tous les booléens sont NON, tous les flotteurs sont 0.0, et tout le reste est 0. J'ai essayé de faire ce que vous avez dit et je me retrouve au même endroit. – Randall

+0

Ensuite, je suggère d'ajouter autant de détails supplémentaires à votre question que possible. Ce n'est pas clair ce que tu fais. –

0

Avez-vous essayé de surcharger copyWithZone?

Je suppose que votre article est copié et pas directement initié.

Questions connexes