2011-03-28 2 views
3

J'ai un problème concernant les NSCells sous-classés (cases à cocher). Je veux qu'ils aient un titre et un sous-titre à côté de la coche (j'ai donc créé des propriétés NSString pour ceux-ci). Leurs valeurs doivent être définies via Bindings (du IB serait génial) mais voici le problème:Liaisons de cacao et propriétés NSCell personnalisées

IB ne me permet de définir la "valeur" des cellules, dans mon cas un BOOL pour l'état de checkmark.

Quelle classe doit être liée à NSArrayController qui traite les données? Il semble que les cellules elles-mêmes ne peuvent pas être lié à quoi que ce soit et de faire des choses comme

[self.subtitle bind:...] 

ne fonctionnent pas non plus. Où et quand dois-je faire la liaison?

Best, Stefan

Répondre

0

Je vais supposer que vous faites cela dans un NSTableView à base de cellules, car NSButtonCell n'expose une title obligatoire, mais il est inutile dans le contexte d'un NSTableView, parce que vous devez lier le NSTableColumn et que expose uniquement une liaison de valeur pour NSTableColumns contenant NSButtonCells. C'est une lacune de la structure, et Google révèle que beaucoup se sont débattus avec.

Une approche consiste à mettre à jour le titre du modèle dans vos méthodes de délégué -tableView:dataCellForTableColumn:row: et -tableView:willDisplayCell:forTableColumn:row:. Cela a l'inconvénient de ne pas être mis à jour via KVO lorsque le modèle sous-jacent change. Si cela est important pour votre application, une solution de contournement consiste à rendre le modèle keyPath pour le value de la case à cocher dépend du modèle keyPath pour le title de la case à cocher. De cette façon, lorsque le titre change, KVO enverra des notifications pour une modification de la valeur, ce qui entraînera le redessin de la ligne, et ainsi le titre sera mis à jour par la méthode déléguée.

Je remarque que cette question est ancienne, mais une approche plus simple de nos jours serait d'utiliser NSTableViews NSView. Une fois cela fait, vous travaillez avec un contrôle NSButton de première classe, avec des liaisons Value et Title (et un tas d'autres) disponibles. C'est souvent une approche plus réalisable, en supposant que vous ne vous inquiétez pas de la prise en charge de la version du système d'exploitation antérieure à Lion.

Questions connexes