web-dev-qa-db-fra.com

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

J'ai besoin de connaître l'utilisation des méthodes déléguées dans Objective-C. Quelqu'un peut-il me diriger vers la bonne source?

51
Sreelal

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

@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 @implementation.

Ce que ce code a fait était de déclarer un protocole appelé FooDelegate; une classe conforme à ce protocole serait déclarée comme @interface SomeClass : SuperClass <FooDelegate> {}. Étant donné que cette classe est conforme au protocole FooDelegate, elle peut désormais implémenter les méthodes sous FooDelegate (pour exiger qu'elles soient implémentées, utilisez @required au lieu de @optional). La dernière étape consiste à instancier un objet Foo dans la classe conforme à FooDelegate, et à définir pour cet objet Foo sa propriété de délégué:

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

Maintenant, votre classe est prête à recevoir des messages des objets Foo dont les délégués ont été correctement définis.

128
Jonathan Sterling

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

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

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

SampleDelegate.h

#import
@protocol SampleDelegate
@optional

#pragma Home Delegate

-(NSString *)getViewName;

@end
  1. Importez la classe de protocole ci-dessus dans la classe que vous souhaitez déléguer à une autre classe. Ici dans mon ex. J'utilise AppDelegate pour déléguer l'objet HomeViewController.

ajouter également au-dessus de DelegateName dans la référence de délégué <>

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];

}
8
iCrazyDev

Pour commencer, vous pouvez voir ce que Apple a à dire sur les méthodes de délégué. La documentation fournit des informations bien écrites sur la délégation, et explique à la fois comment utiliser les classes AppKit qui définir et prendre 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 des objets

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

L'aspect le plus important à retirer des méthodes déléguées 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.

2
Sean Murphy

Si le (s) objet (s) en question a son delegate assigné à une classe que vous avez écrite, dites controller alors les méthodes définies pour être les méthodes delegate de la classe de cet objet doivent être implémentées par la classe assignée. Cela vous permet de contrôler efficacement le comportement de l'objet sans sous-classer la classe de l'objet afin de remplacer le comportement qui nécessiterait probablement un certain nombre de comportements de duplication. C'est l'une des parties les plus propres de la conception tactile de cacao.

C'est quelque chose que vous devriez ramasser dans les deux premières intros et tutoriels pour toucher le cacao. Comme ça le tutoriel de Cocoa est ma petite amie . En fait, ils ont fait de l'explication delegate un gros titre gras.

2
dlamblin