iOS - Delegierte

Beispiel für Delegieren

Nehmen wir an, ein Objekt A ruft ein Objekt B auf, um eine Aktion auszuführen. Sobald die Aktion abgeschlossen ist, sollte Objekt A wissen, dass B die Aufgabe abgeschlossen hat, und die erforderlichen Maßnahmen ergreifen. Dies wird mit Hilfe von Delegierten erreicht.

Die Schlüsselkonzepte im obigen Beispiel sind -

  • A ist ein delegiertes Objekt von B.

  • B wird eine Referenz von A haben.

  • A implementiert die Delegatenmethoden von B.

  • B benachrichtigt A über die Delegatmethoden.

Schritte zum Erstellen eines Delegaten

Step 1 - Erstellen Sie zunächst eine Einzelansichtsanwendung.

Step 2 - Wählen Sie dann Datei → Neu → Datei ...

Step 3 - Wählen Sie dann Objective C Class aus und klicken Sie auf Next.

Step 4 - Geben Sie der Klasse einen Namen, z. B. SampleProtocol mit der Unterklasse NSObject (siehe unten).

Step 5 - Wählen Sie dann erstellen.

Step 6 - Fügen Sie der Datei SampleProtocol.h ein Protokoll hinzu, und der aktualisierte Code lautet wie folgt: -

#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 - Implementieren Sie die Instanzmethode, indem Sie die Datei SampleProtocol.m wie unten gezeigt aktualisieren.

#import "SampleProtocol.h"

@implementation SampleProtocol

-(void)startSampleProcess {
   [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate 
	selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end

Step 8 - Fügen Sie ein UILabel in die ViewController.xib ein, indem Sie das Label wie unten gezeigt aus der Objektbibliothek nach UIView ziehen.

Step 9 - Erstellen Sie ein IBOutlet für das Label, benennen Sie es als myLabel und aktualisieren Sie den Code wie folgt, um SampleProtocolDelegate in ViewController.h zu übernehmen.

#import <UIKit/UIKit.h>
#import "SampleProtocol.h"

@interface ViewController : UIViewController<SampleProtocolDelegate> {
   IBOutlet UILabel *myLabel;
}
@end

Step 10Implementieren Sie die Delegate-Methode, erstellen Sie ein Objekt für SampleProtocol und rufen Sie die startSampleProcess-Methode auf. Die aktualisierte Datei ViewController.m lautet wie folgt:

#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 11Wir werden eine Ausgabe wie folgt sehen. Zu Beginn zeigt das Label "Verarbeitung ..." an, das aktualisiert wird, sobald die Delegate-Methode vom SampleProtocol-Objekt aufgerufen wird.