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 ?
Réponses
Trop de publicités?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.
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....
- Créer une classe de protocole.... (.h seulement)
SampleDelegate.h
#import
@protocol SampleDelegate
@optional
#pragma Home Delegate
-(NSString *)getViewName;
@end
- 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];
}
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.
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.