iOS - delegaci
Przykład dla delegata
Załóżmy, że obiekt A wywołuje obiekt B w celu wykonania akcji. Po zakończeniu akcji obiekt A powinien wiedzieć, że B wykonał zadanie i podjąć niezbędne działania. Osiąga się to przy pomocy delegatów.
Kluczowe pojęcia w powyższym przykładzie to:
- A jest obiektem delegata B. 
- B będzie miał odniesienie do A. 
- A zaimplementuje delegowane metody B. 
- B powiadomi A za pomocą metod delegata. 
Kroki tworzenia delegata
Step 1 - Najpierw utwórz pojedynczą aplikację widoku.
Step 2 - Następnie wybierz Plik → Nowy → Plik ...
 
                Step 3 - Następnie wybierz Objective C Class i kliknij Next.
Step 4 - Nadaj klasie nazwę, powiedzmy SampleProtocol z podklasą jako NSObject, jak pokazano poniżej.
 
                Step 5 - Następnie wybierz utwórz.
Step 6 - Dodaj protokół do pliku SampleProtocol.h, a zaktualizowany kod będzie wyglądał następująco -
#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
@endStep 7 - Zaimplementuj metodę instancji, aktualizując plik SampleProtocol.m, jak pokazano poniżej.
#import "SampleProtocol.h"
@implementation SampleProtocol
-(void)startSampleProcess {
   [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate 
	selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@endStep 8 - Dodaj UILabel w ViewController.xib, przeciągając etykietę z biblioteki obiektów do UIView, jak pokazano poniżej.
 
                Step 9 - Utwórz IBOutlet dla etykiety i nadaj mu nazwę myLabel i zaktualizuj kod w następujący sposób, aby przyjąć SampleProtocolDelegate w ViewController.h.
#import <UIKit/UIKit.h>
#import "SampleProtocol.h"
@interface ViewController : UIViewController<SampleProtocolDelegate> {
   IBOutlet UILabel *myLabel;
}
@endStep 10Zaimplementuj metodę delegata, utwórz obiekt dla SampleProtocol i wywołaj metodę startSampleProcess. Zaktualizowany plik ViewController.m jest następujący -
#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"];
}
@endStep 11Zobaczymy dane wyjściowe w następujący sposób. Początkowo etykieta wyświetla „przetwarzanie ...”, które jest aktualizowane po wywołaniu metody delegata przez obiekt SampleProtocol.
