Question

Bonjour,

J'ai un projet d'application de vue où j'ai créé une classe NSObject appelée « SquareClass ». Maintenant, à partir de l'interface builder de Xcode, je veux être en mesure d'instancier que « SquareClass » dans un objet carré avec une portée globale, de telle sorte que, lorsque je crée des actions de tous les contrôles de l'interface utilisateur (c.-à-textboxes, boutons, etc ... ), je veux être en mesure d'appeler des méthodes de cet objet dans ces actions.

Exemple:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

Comme vous pouvez le voir, l'objet carré doit avoir une portée globale. Cela pourrait semble moyen facile ou peut-être le mauvais de ce faire pour certains d'entre nous. Je l'ai regarde à travers le web, et un peu trouvé un moyen pour un fichier .nib, pas pour un fichier .xib.

Toute suggestion serait grandement appréciée. Merci beaucoup.

Yohann.

ps: Ceci est mon premier post jamais, soyez indulgent

.
Était-ce utile?

La solution

Tout d'abord, un fichier NIB est, à toutes fins utiles, le même que celui d'un fichier XIB; il est juste une version compilée d'un fichier XIB.

Maintenant, pour créer un objet dérivé de NSObject dans votre NIB / XIB, il suffit de faire glisser un NSObject de la fenêtre de la bibliothèque dans votre fichier. Puis, l'inspecteur Identity changer la classe de votre classe personnalisée.

Si vous définissez des méthodes comme celle-ci:

- (IBAction)myAction:(id)sender

vous serez en mesure de les brancher dans Interface Builder.

Ceci étant dit, il est difficile de dire si ce que vous faites est la bonne chose à faire du tout. Il me semble que vous devriez utiliser une sous-classe NSViewController donc un coup d'oeil à la documentation pour cela.

Vous devez également vous assurer que vous comprenez ce point de vue, les objets du contrôleur et le modèle sont. Il y a beaucoup de littérature sur ce sujet.

Autres conseils

Si vous créez une classe UIView extension, alors vous pouvez faire pour votre propriétaire xib du fichier mise en œuvre de la catégorie supérieure. A partir de ce moment-là simplement ajouter une variable d'instance à votre classe étendue pour la place. La dernière étape du processus consiste à ajouter des méthodes à votre classe pour se lier à chacun des contrôles aux actions.

- (IBAction) pinSelected: (id)sender;

Une fois que vous créez ces méthodes (assurez-vous de les faire revenir IBAction, il est en fait un alias pour vide, mais agit comme un indice pour interfacer Builder), vous pouvez lier vos contrôles à la méthode par le propriétaire du fichier (en utilisant le contrôle + glisser pour établir le lien).

Bonne chance!

J'ai trouvé comment faire ce que je avais besoin qui ne se fait pas dans le fichier XIB. Il est beaucoup plus simple que ce que je pensais, eventhough les suggestions ci-dessus sont VALIDE.

Pour utiliser l'objet carré, je devais juste faire référence au fichier d'en-tête:

 #import "square.h"

dans le SquareUIViewController.h et ajouter une référence à un objet carré:

Square *square;

Ensuite, dans le SquareUIController.m, je viens d'allouer / initialiser l'objet carré avant de faire quoi que ce soit d'autre:

(IBAction)myInit
{
square = [[Square alloc] init];
}

Maintenant, je peux utiliser les méthodes du premier poste Et voilà!

ps: critiques, lancez

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top