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?
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.
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 ....
SampleDelegate.h
#import
@protocol SampleDelegate
@optional
#pragma Home Delegate
-(NSString *)getViewName;
@end
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];
}
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.
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.