J'ai donc un NSTabView que je suis en train de redimensionner dynamiquement et de remplir avec des sous-classes NSView. Je voudrais concevoir les pages dans IB, puis les instancier et les ajouter à NSTabView. J'ai ajouté l'ajout programmatique de sous-classes NSView, mais je ne sais pas comment les concevoir dans IB, puis les instancier.Créer une sous-classe NSView dans Interface Builder, puis l'instancier?
Répondre
Je pense que je l'ai eu. Faites-moi savoir si ce n'est pas une bonne chose à faire.
J'ai créé un nouveau fichier xib, défini son propriétaire comme un NSViewController et défini sa "vue" sur la vue personnalisée que j'ai créée dans le xib.
Ensuite, vous avez juste besoin:
NSViewController *viewController = [[NSViewController alloc] initWithNibName:@"MyViewXib" bundle:nil];
NSView *myView = [viewController view];
@toastie avait une très bonne réponse. Le mien est similaire, mais nécessite un peu plus d'explications. Supposons que vous ayez déjà un objet contrôleur et que vous ne souhaitiez pas instancier un nouvel objet contrôleur pour obtenir une vue, et disons que vous aurez besoin de plusieurs copies de cette vue (par exemple Par exemple, vous avez conçu un UITableViewCell personnalisé dans IB et vous voulez l'instancier encore et encore depuis votre UITableViewController). Voici comment vous pourriez faire cela:
- Ajoutez un nouvel IBOutlet à votre classe existante appelée "specialView" (ou quelque chose comme ça). Il peut également être utile de le déclarer comme une propriété (nonatomic, retain).
- Créer une nouvelle vue xib appelée "SpecialView", et construire la vue comme vous le souhaitez.
- Définissez le propriétaire du fichier de la vue comme objet de contrôleur.
- Définissez la sortie specialView du propriétaire du fichier comme nouvelle vue.
- Chaque fois que vous avez besoin d'une nouvelle copie de la vue dans votre code, vous pouvez simplement faire ce qui suit.
(texte gratuit pour obtenir le formatage fonctionne correctement)
NSNib * viewNib = [[NSNib alloc] initWithNibNamed:@"SpecialView" bundle:nil];
[viewNib instantiateNibWithOwner:self topLevelObjects:nil];
[viewNib release];
NSView * myInstantiatedSpecialView = [[[self specialView] retain] autorelease];
[self setSpecialView:nil];
Oui, il est un peu plus de code que d'autres façons, mais je préfère cette méthode simplement parce que la vue apparaît dans le IBOutlet désigné. Je conserve et libère la vue, parce que j'aime réinitialiser la prise à zéro une fois que j'ai la vue, de sorte qu'il peut être immédiatement prêt à charger une nouvelle copie de la vue. Je tiens également à souligner que le code pour cela est encore plus court sur l'iPhone, ce qui nécessite une ligne pour charger la vue, et pas 3 (comme sur le Mac). Cette ligne est simplement:
[[NSBundle mainBundle] loadNibNamed:@"SpecialView" owner:self options:nil];
HTH!
- 1. interface builder personnalisé nsview envoi d'action au parent
- 2. Puis-je sous-classer une vue construite avec Interface Builder?
- 3. Interface Builder UIDatePicker
- 4. Modèle (de MVC) dans Interface Builder?
- 5. Mon plugin se bloque Interface Builder
- 6. Interface Builder pour iPhone tutoriel
- 7. Utilisation des balises Interface Builder
- 8. Remplacer l'instanciation d'objets de Builder Interface?
- 9. Création d'une vue de navigation dans Interface Builder
- 10. Exemple de code pour Inteface Builder pour créer une interface utilisateur comme Preview.app?
- 11. iPhone Interface Builder et les délégués
- 12. Programmation avec Interface Builder en mode paysage
- 13. Comment la liaison est-elle spécifiée pour les plug-ins Interface Builder?
- 14. Sur OS X, séparant une interface graphique en plusieurs fichiers NIB et NSView sous-classes
- 15. problème fondamental avec l'onglet barre d'application et Interface Builder
- 16. Comment utiliser Interface Builder pour contrôler UINavigationControllers correctement?
- 17. Créer une interface Flash pour WordPress?
- 18. IPhone SDK: Utiliser Interface Builder pour lier des tableaux
- 19. Comment puis-je programmer une interface graphique dans MATLAB?
- 20. Interface Builder ne peut pas afficher correctement les images 160dpi?
- 21. Fenêtre de l'inspecteur des attributs de Cocoa Interface Builder
- 22. Comment faire fonctionner le défilement avec Interface builder sur l'iPhone?
- 23. XCode et Interface Builder ne sont plus synchronisés
- 24. Comment créer une socket sortante vers une interface réseau SPECIFIC?
- 25. Sorties Interface-Builder provoquant un comportement d'affichage impair
- 26. UITextField changer la taille de la police via Interface Builder
- 27. XCode/Interface Builder: Comment renommer les éléments NSToolbar par défaut?
- 28. Comment puis-je créer une interface similaire à une feuille de calcul Excel sur l'iPhone?
- 29. Accéder aux éléments d'interface utilisateur créés dans Interface Builder dans le contrôleur?
- 30. iPhone - Comment puis-je ajouter le contrôle NSStepper à Interface Builder?
Je pense que vous vous en approchez. Mais je ne pense pas que vous devriez définir le FirstResponder comme NSViewController, vous devez définir le propriétaire de fichiers comme un NSViewController (et lier l'affichage IBOutlet du contrôleur de vue). –
Oups, c'est ce que je voulais dire en fait, c'était le propriétaire du fichier. Je vais le corriger dans la réponse pour ne pas confondre les gens. – toastie