iOS - Délégués
Exemple pour le délégué
Supposons qu'un objet A appelle un objet B pour effectuer une action. Une fois l'action terminée, l'objet A doit savoir que B a terminé la tâche et prendre les mesures nécessaires. Ceci est réalisé avec l'aide des délégués.
Les concepts clés de l'exemple ci-dessus sont:
A est un objet délégué de B.
B aura une référence de A.
A implémentera les méthodes déléguées de B.
B notifiera A via les méthodes déléguées.
Étapes de création d'un délégué
Step 1 - Tout d'abord, créez une application à vue unique.
Step 2 - Sélectionnez ensuite Fichier → Nouveau → Fichier ...
Step 3 - Sélectionnez ensuite Objective C Class et cliquez sur Next.
Step 4 - Donnez un nom à la classe, par exemple, SampleProtocol avec la sous-classe comme NSObject comme indiqué ci-dessous.
Step 5 - Sélectionnez ensuite créer.
Step 6 - Ajoutez un protocole au fichier SampleProtocol.h et le code mis à jour est le suivant -
#import <Foundation/Foundation.h>
// Protocol definition starts here
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
// Protocol Definition ends here
@interface SampleProtocol : NSObject {
// Delegate to respond back
id <SampleProtocolDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)startSampleProcess; // Instance method
@end
Step 7 - Implémentez la méthode d'instance en mettant à jour le fichier SampleProtocol.m comme indiqué ci-dessous.
#import "SampleProtocol.h"
@implementation SampleProtocol
-(void)startSampleProcess {
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate
selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end
Step 8 - Ajoutez un UILabel dans le ViewController.xib en faisant glisser l'étiquette de la bibliothèque d'objets vers UIView comme indiqué ci-dessous.
Step 9 - Créez un IBOutlet pour l'étiquette et nommez-le myLabel et mettez à jour le code comme suit pour adopter SampleProtocolDelegate dans ViewController.h.
#import <UIKit/UIKit.h>
#import "SampleProtocol.h"
@interface ViewController : UIViewController<SampleProtocolDelegate> {
IBOutlet UILabel *myLabel;
}
@end
Step 10Implémentez la méthode déléguée, créez un objet pour SampleProtocol et appelez la méthode startSampleProcess. Le fichier ViewController.m mis à jour est le suivant -
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
sampleProtocol.delegate = self;
[myLabel setText:@"Processing..."];
[sampleProtocol startSampleProcess];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Sample protocol delegate
-(void)processCompleted {
[myLabel setText:@"Process Completed"];
}
@end
Step 11Nous verrons une sortie comme suit. Initialement, l'étiquette affiche «traitement ...», qui est mis à jour une fois que la méthode déléguée est appelée par l'objet SampleProtocol.