J'essaye de créer par programme une fenêtre avec contentView
personnalisé et un contrôle personnalisé NSTextField
, mais j'ai de la difficulté à obtenir cette hiérarchie de fenêtres et de vues à dessiner.drawRect ne pas être appelé sur sous-vue ajoutée
Je crée une fenêtre sans bordure personnalisée et remplace ses accesseurs setContentView
/contentView
. Cela semble fonctionner correctement et les méthodes initWithFrame
et drawRect
de contentView sont appelées pour que contentView se dessine correctement. Mais dès que j'essaye d'ajouter par programmation NSTextField
à contentView
, il n'est pas ajouté ou dessiné. En disant coutume je veux dire que je la remplacer est désignée initialiseur (initWithFrame:frame
- uniquement pour le réglage police personnalisée) et la méthode drawRect qui ressemble à ceci:
- (void)drawRect:(NSRect)rect {
NSRect bounds = [self bounds];
[super drawRect:bounds];
}
La coutume de initialiseur de contentView ressemble à ceci:
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self != nil) {
// i want to draw itself to the same
// size as contentView thus i'm using same frame
CustomTextField *textField = [[CustomTextField alloc] initWithFrame:frame];
[self addSubview:textField];
[self setNeedsDisplay:YES];
}
return self;
}
J'ai été strugling avec cela pendant quelques heures, donc les pointeurs sont très appréciés. Plus de code est disponible sur demande.)
Eh bien, j'ai même essayé de ne pas surcharger la méthode 'drawRect' ou simplement de dessiner un rectangle noir. La raison pour laquelle j'ignore le paramètre 'rect' est parce qu'il ne définit que la zone qui doit être redessinée. Par exemple lorsque le curseur sur le champ de texte clignote - OS envoie drawRect avec un message avec le paramètre rect qui ne définit que la zone de ce curseur. Merci pour vos conseils, je vais essayer de le suivre. – Eimantas