[Cocoa Obj-C] Instancier des objets dynamiquement

Broq

Membre enregistré
8 Février 2006
4
0
40
Bonjour, je suis débutant en programmation cocoa/objective-C. J'aimerais pouvoir créer des NSTextField "à la volée" dans un NSBox.

Pour détailler, j'ai un NSTextView dans lequel je tape du texte, ce texte est récupéré quand je clique sur un NSButton et je dois alors créer un NSTextField par mot récupéré et les afficher les uns à la suite des autres dans un NSBox.

Par exemple si je tape "Hello World" dans mon NSTextView et que je clique sur OK, deux NSTextField seront créés dans la NSBox, un contenant "Hello" et l'autre "World".

Le problème est que je n'arrive pas à créer ces objets pendant l'exécution. J'ai essayé des méthodes comme addSubView mais ça ne semble rien faire...

Merci de votre aide,

FB.
 
Bloc de code:
NSTextField* text=[[NSTextField alloc] init];
[text setStringValue:@"Hello"];
[text setFrame:NSMakeRect(10,10,200,22)];
NSTextField* text2=[[NSTextField alloc] init];
[text2 setStringValue:@"World"];
[text2 setFrame:NSMakeRect(10,40,200,22)];
	
NSView* contentView=[box1 contentView];
[contentView addSubview:text];
[contentView addSubview:text2];

[text release];
[text2 release];
 
Merci beaucoup, ça ressemble au code que j'avais produit, mais le problème doit venir de ce que j'ai fait dans Interface Builder, puisque ça ne fonctionne toujours pas.

Dans IB j'ai créé une NSBox dans la NSWindow de MainMenu.nib. J'ai créé un sous-classe de NSObject appelée Tokenizer contenant un IBOutlet NSBox. Je l'ai instanciée et j'ai relié la NSBox de l'instance à la NSBox de la fenêtre. Ensuite, dans la fonction -(id)init de Tokenizer, j'ai placé le code que tu m'as fourni.

Je m'y prends mal?
 
Ensuite, dans la fonction -(id)init de Tokenizer

Pas dans init mais dans awakeFromNib

Bloc de code:
-(void) awakeFromNib
{
   // faire les traitement sur les IBOutlets ici, 
   // car dans init, il ne sont pas encore initialisés (valeur à nil)
}
 
Merci ça marche bien maintenant :D

Sinon j'ai l'habitude de programmer en Java et je me demandais si il était possible en cocoa comme avec Swing de créer des "Layout", qui permettent d'agencer des éléments dans une vue.

Par exemple quand on utilise un FlowLayout associé à une vue, tous les éléments de cette vue sont placés les uns à la suite des autres.

Pour le moment en cocoa je vois comment ajouter un élément à une vue en spécifiant ses coordonnées, mais si je dois ajouter un nombre indéfini d'éléments pendant l'exécution, le calcul à la main de ces coordonnées pour chacun des éléments risque d'être long et difficile :p