7 votes

Événements pour l'UIView personnalisé

Quelle est la meilleure façon d'enregistrer des événements pour ma sous-classe UIView, afin que je puisse les connecter à des IBAction-s dans le constructeur d'interface ?

Actuellement, j'ai juste un UIView standard déposé sur ma vue principale et j'ai défini la classe à "RadioDial" (ma classe personnalisée). Cela affiche bien la vue, mais je n'ai aucune idée de la manière dont on peut obtenir des événements à partir de cette vue.

Gracias

5voto

Jason Points 11332

Veuillez préciser : voulez-vous dire que vous aimeriez qu'Interface Builder offre à vos contrôleurs de vue la possibilité de câbler des événements personnalisés que votre sous-classe de vue émettra (de la même manière que les contrôles Button vous permettent de câbler Touch Inside, etc.)

Si vous avez besoin de ce type de fonctionnalité, vous devrez utiliser une propriété "delegate" généralisée sur votre vue, combinée à un protocole.

@protocol RadioDialDelegate
-(void)dialValueChanged:(id)sender
@end

@interface RadioDial
{
    id<RadioDialDelegate> radioDelegate;
}
@property (nonatomic, assign) IBOutlet id<RadioDialDelegate> radioDelegate;

Cela permettra au contrôleur de se connecter à la vue (en supposant qu'il implémente RadioDialDelegate) et de recevoir tous les événements provenant de la vue. Vous pouvez également utiliser un délégué non typé et, dans votre code de vue, utiliser un appel lié tardif :

if([radioDelegate respondsToSelector:@selector(dialValueChanged:)]) {
    [radioDelegate dialValueChanged:self];
}

3voto

Felixyz Points 10705

Créez une méthode dans votre contrôleur de vue (au moins, vous devriez avoir un RootViewController dans votre projet). Disons que votre méthode est

  -(void) buttonClicked { code code code }

Dans le fichier d'en-tête du contrôleur (par exemple RootViewController.h), vous mettez ensuite :

  -(IBAction) buttonClicked;

Dans IB, vous cliquez avec le bouton droit de la souris sur le bouton, le cadran de la radio ou autre chose. Vous verrez une liste d'événements et vous pourrez faire glisser le connecteur de l'événement que vous voulez que votre contrôleur reçoive, vers l'objet de l'IB qui représente le contrôleur (probablement First Responder). Cela dépend de la façon dont votre structure IB est configurée, mais cela devrait être simple.

Une autre solution consiste à apprendre à créer des vues UIV par programme et à oublier l'IB pour le moment. Les avis sont partagés sur la question de savoir s'il vaut mieux apprendre à utiliser l'IB dès le départ ou s'il est préférable d'apprendre à tout faire en code et de garder l'IB pour plus tard. Quoi qu'il en soit, il est nécessaire d'apprendre les deux façons de mettre en place une interface à un moment ou à un autre.

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