56 votes

Exemple de code pour la création d'un "label" NSTextField?

Dans mon bureau Mac OS X app, j'aimerais en programmant créer un NSTextField "label" qui a le même comportement et les propriétés qu'un label créé dans Interface Builder.

J'ai l'habitude d'utiliser (et comme beaucoup) de l'IB, mais dans ce cas, il doit être fait par programmation.

Essayez comme je pourrais, je n'arrive pas à trouver la combinaison de la méthode appels par programmation à produire la même étiquette-y le comportement comme un "Label" traînés à partir de l'IB Vue de la palette Bibliothèque.

Quelqu'un peut-il fournir ou un point à un exemple de code pour le faire par programmation? Thx.

121voto

naixn Points 2447

Une étiquette est en fait une instance de NSTextField , une sous-classe de NSView. Donc, puisqu'il s'agit d'une NSView, il faut l'ajouter à une autre vue.

Voici un code de travail:

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSTextField *textField;

    textField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 10, 200, 17)];
    [textField setStringValue:@"My Label"];
    [textField setBezeled:NO];
    [textField setDrawsBackground:NO];
    [textField setEditable:NO];
    [textField setSelectable:NO];
    [view addSubview:textField];
}
 

8voto

danielpunkass Points 10076

Cela peut être difficile d'obtenir le droit. Je n'ai pas la recette pour une réplique exacte portée de main, mais quand j'ai été coincé dans une situation similaire, voici ce que je fais:

  1. Créer un élément de l'INTERFACE utilisateur de l'IB.
  2. Ajouter une prise de courant à partir de mon contrôleur de classe.
  3. Pause dans gdb dans awakeFromNib ou quoi que ce soit.
  4. Dans le gdb invite, "p *whateverOutlet" ... cela va vous montrer la structure C contenu de l'étiquette NSTextField que IB à mettre en place.

En regardant les nombreuses valeurs de là, vous pouvez obtenir beaucoup de suppositions sur ce que vous êtes en négligeant de les définir. Habituellement, il finit par être un peu de magie combinaison de la lunette et des paramètres de bordure, qui vous mène là où vous voulez être.

5voto

g-Off Points 85

Vous pouvez essayer d’utiliser nib2objc pour obtenir toutes les propriétés définies par IB.

2voto

Steven Degutis Points 315

Spécifiquement, vous voudrez définirBordered: NO et définir le style de la lunette sur le style que vous avez oublié. Aussi setEditable: NO, et éventuellement setSelectable: NO. Cela devrait suffire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X