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.