51 votes

Comment utiliser des délégués personnalisés en Objective-C

J'ai besoin de connaître l'utilisation des méthodes de délégation en Objective-C. Quelqu'un peut-il m'indiquer la bonne source ?

128voto

Jonathan Sterling Points 11628

Vous voudrez déclarer un protocole de délégué pour votre classe. Un exemple de protocole de délégation et d'interface pour la classe Foo pourrait ressembler à ça :

@class Foo;
@protocol FooDelegate <NSObject>
@optional
- (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag;
- (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag;
@end

@interface Foo : NSObject {
     NSString *bar;
     id <FooDelegate> delegate;
}

@property (nonatomic, retain) NSString *bar;
@property (nonatomic, assign) id <FooDelegate> delegate;

- (void)someAction;

@end

N'oubliez pas de synthétiser vos propriétés dans le cadre du @implementation .

Ce code a déclaré un protocole appelé FooDelegate ; une classe qui se conforme à ce protocole serait déclarée comme suit @interface SomeClass : SuperClass <FooDelegate> {} . Parce que cette classe se conforme au protocole FooDelegate il doit maintenant mettre en œuvre les méthodes sous FooDelegate (pour exiger qu'ils soient mis en œuvre, utilisez @required au lieu de @optional ). La dernière étape est pour un Foo à instancier dans la classe qui se conforme à FooDelegate et pour cela Foo pour que sa propriété de délégué soit définie :

Foo *obj = [[Foo alloc] init];
[obj setDelegate:self];

Maintenant, votre classe est prête à recevoir des messages provenant de Foo qui ont leurs délégués correctement définis.

8voto

iCrazyDev Points 679

Les délégués sont très utiles pour contrôler manuellement le transfert dans le tableau des contrôleurs de vue de l'application. En utilisant les délégués, vous pouvez très bien gérer le flux de contrôle.

voici un petit exemple de vos propres délégués....

  1. Créer une classe de protocole.... (.h seulement)

SampleDelegate.h

#import
@protocol SampleDelegate
@optional

#pragma Home Delegate

-(NSString *)getViewName;

@end
  1. Importez la classe du protocole ci-dessus dans la classe que vous voulez rendre déléguée d'une autre classe. Ici dans mon exemple. J'utilise AppDelegate pour faire un délégué de l'objet HomeViewController.

ajoutez également au-dessus DelegateName dans Delegate Reference < >

ownDelegateAppDelegate.h
#import "SampleDelegate.h"

@interface ownDelegateAppDelegate : NSObject <UIApplicationDelegate, SampleDelegate>
{

}

ownDelegateAppDelegate.m

//setDelegate of the HomeViewController's object as
[homeViewControllerObject setDelegate:self];

//add this delegate method definition
-(NSString *)getViewName
{
    return @"Delegate Called";
}

HomeViewController.h

#import
#import "SampleDelegate.h"

@interface HomeViewController : UIViewController 
{

    id<SampleDelegate>delegate;
}

@property(readwrite , assign) id<SampleDelegate>delegate;

@end

HomeViewController.h

- (void)viewDidAppear:(BOOL)animated 
{

    [super viewDidAppear:animated];
    UILabel *lblTitle = [[UILabel alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    lblTitle.text = [delegate getViewName];
    lblTitle.textAlignment = UITextAlignmentCenter;
    [self.view addSubview:lblTitle];

}

2voto

Sean Murphy Points 1556

Pour commencer, vous pouvez jeter un coup d'œil à ce qu'Apple a à dire sur les méthodes de délégation. La documentation fournit des informations bien écrites sur ce qu'est la délégation et explique à la fois comment utiliser les classes AppKit qui définissent et prennent en charge un délégué et comment coder la prise en charge des délégués dans l'un de vos propres objets.

Voir Communiquer avec les objets

(Si vous souhaitez coder votre propre support de délégué, passez directement à la section "Implémentation d'un délégué pour une classe personnalisée").

L'aspect le plus significatif à retenir des méthodes de délégation est qu'elles vous permettent de personnaliser et d'affecter le comportement d'un objet sans avoir besoin de le sous-classer.

J'espère que cela vous aidera à démarrer.

2voto

dlamblin Points 14546

Si le(s) objet(s) en question a/ont son/leur delegate assigné à une classe que vous avez écrite, disons un controller alors les méthodes définies pour être la classe de cet objet delegate doivent être mises en œuvre par la classe affectée. Cela vous permet de contrôler efficacement le comportement de l'objet sans avoir à sous-classer la classe de l'objet afin de remplacer un comportement qui nécessiterait probablement une quantité de duplications. C'est l'une des parties les plus propres de la conception de cocoa touch.

C'est quelque chose que vous devriez apprendre dans les premières intros et tutoriels de la touche cacao. Par exemple tutoriel de Cocoa is my Girlfriend . En fait, ils ont fait le delegate expliquer un titre en gros caractères gras.

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