Ok en effet c'est très bien comme ça. Par contre sous IB je dessine mes outlets dans des vues différentes, il faut donc "cacher" ces vues une fois qu'on les a construite non?
Ok en effet c'est très bien comme ça. Par contre sous IB je dessine mes outlets dans des vues différentes, il faut donc "cacher" ces vues une fois qu'on les a construite non?
J'ai modifié le code, regarde Tu verras que je fais [rightView setSubviews:[NSArray arrayWithObject:view]]; donc ça remplace imédiatement la vue qui était dans la rightView par la nouvelle.
<br />- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView *)controlView<br />{ <br /> if (image)<br /> {<br /> NSSize imageSize;<br />Â Â Â Â NSRect imageFrame;<br /> <br /> if ([self tag]) cellFrame.origin.x += OPTIONAL_ORIGIN_X_OFFSET;<br /> <br />Â Â Â Â imageSize = [image size];<br />Â Â Â Â NSDivideRect(cellFrame, &imageFrame, &cellFrame, 3 + imageSize.width, NSMinXEdge);<br /> <br /> imageFrame.origin.x += IMAGE_ORIGIN_X_OFFSET;<br /> imageFrame.origin.y -= IMAGE_ORIGIN_Y_OFFSET;<br />Â Â Â Â imageFrame.size = imageSize;<br /> <br />Â Â Â Â if ([controlView isFlipped])<br />Â Â Â Â Â Â imageFrame.origin.y += ceil((cellFrame.size.height + imageFrame.size.height) / 2);<br />Â Â Â Â else<br />Â Â Â Â Â Â imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2);<br /> <br /> [image compositeToPoint: imageFrame.origin operation: NSCompositeSourceOver];<br /> <br /> NSRect newFrame = cellFrame;<br /> newFrame.origin.x += TEXT_ORIGIN_X_OFFSET ;<br /> newFrame.origin.y += TEXT_ORIGIN_Y_OFFSET;<br /> newFrame.size.height -= TEXT_HEIGHT_ADJUST;<br /> <br /> [super drawWithFrame: newFrame inView: controlView];<br />Â Â }<br /> else<br /> {<br /> if ([self tag]) cellFrame.origin.x = 5;<br /> <br /> // Center the text in the cellFrame<br /> CGFloat yOffset = floor((NSHeight(cellFrame) - [[self attributedStringValue] size].height) / 2.0);<br /> <br /> cellFrame.origin.y += yOffset;<br /> cellFrame.size.height -= (TEXT_ORIGIN_Y_OFFSET * yOffset);<br /> <br /> [super drawWithFrame: cellFrame inView: controlView];<br /> } <br />}<br />
ça évite de créer 4 sous-classes (deux sous-classes supplémentaires de NSTextFieldCell, une sous-classe de NSTableView et une de NSTableColumn)
Par contre je pense que ta solution est plus favorable à une customisation importante de chaque type de NSCell (comme dans le code que tu as fournis).
Par contre j'ai essayé d'utiliser les méthodes setImage et image de NSActionCell plutôt que d'utiliser une variable d'instance NSImage *image mais ça plante de partout. des idées sur le pourquoi du comment ?
attempt to insert *nil* value ? Non je sais pas oO
heu tu parles d'un éventuel warning que j'aurais eu ? Je l'ai pas eu celui-la... Le code que j'ai fourni marche très bien mais parce que j'utilise une variable d'instance @private NSImage *image...
Si j'essaye de passer par setImage: et image de NSActionCell j'ai plus les textes des NSCell et yen a même une qui disparaà®t... Bon après c'est du chipotage, ça marche très bien dans l'état...
Désolé de déterrer ce sujet mais j'ai un petit problème avec ce type de modification. Cela supprime toutes possibilité de modification du texte. Sur un Outliner il est possible d'éditer alors que sur un TableView non. C'est pas faute d'essayer de mettre isEditable à YES qui manque mai cela n'est pas gardé !
J'ai joint le projet de SideBar légèrement modifier pour permettre l'édition du texte mais ça marche pas ! J'ai pris du code de l'exemple d'Apple.
Réponses
J'ai modifié le code, regarde
Tu verras que je fais [rightView setSubviews:[NSArray arrayWithObject:view]]; donc ça remplace imédiatement la vue qui était dans la rightView par la nouvelle.
Merci pour ces explications. Je vais essayer de faire ça.
En gros, si on est en présence d'un item root, on met le tag du NSCell à 1 et 0 sinon :
Puis ensuite dans la custom NSCell :
ça évite de créer 4 sous-classes (deux sous-classes supplémentaires de NSTextFieldCell, une sous-classe de NSTableView et une de NSTableColumn)
Par contre je pense que ta solution est plus favorable à une customisation importante de chaque type de NSCell (comme dans le code que tu as fournis).
Par contre j'ai essayé d'utiliser les méthodes setImage et image de NSActionCell plutôt que d'utiliser une variable d'instance NSImage *image mais ça plante de partout. des idées sur le pourquoi du comment ?
heu tu parles d'un éventuel warning que j'aurais eu ? Je l'ai pas eu celui-la...
Le code que j'ai fourni marche très bien mais parce que j'utilise une variable d'instance @private NSImage *image...
Si j'essaye de passer par setImage: et image de NSActionCell j'ai plus les textes des NSCell et yen a même une qui disparaà®t...
Bon après c'est du chipotage, ça marche très bien dans l'état...
http://paste.lisp.org/display/73927
Sur un Outliner il est possible d'éditer alors que sur un TableView non.
C'est pas faute d'essayer de mettre isEditable à YES qui manque mai cela n'est pas gardé !
J'ai joint le projet de SideBar légèrement modifier pour permettre l'édition du texte mais ça marche pas ! J'ai pris du code de l'exemple d'Apple.