iOS - Đại biểu
Ví dụ cho Ủy viên
Giả sử một đối tượng A gọi một đối tượng B để thực hiện một hành động. Sau khi hành động hoàn tất, đối tượng A nên biết rằng B đã hoàn thành nhiệm vụ và thực hiện hành động cần thiết. Điều này đạt được với sự giúp đỡ của các đại biểu.
Các khái niệm chính trong ví dụ trên là:
A là đối tượng đại biểu của B.
B sẽ có một tham chiếu của A.
A sẽ triển khai các phương thức ủy nhiệm của B.
B sẽ thông báo cho A thông qua các phương thức ủy nhiệm.
Các bước tạo đại biểu
Step 1 - Đầu tiên, tạo một ứng dụng xem đơn.
Step 2 - Sau đó chọn Tệp → Mới → Tệp ...
Step 3 - Sau đó chọn Objective C Class và nhấn Next.
Step 4 - Đặt tên cho lớp, ví dụ, SampleProtocol với lớp con là NSObject như hình dưới đây.
Step 5 - Sau đó chọn tạo.
Step 6 - Thêm giao thức vào tệp SampleProtocol.h và mã được cập nhật như sau:
#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 - Thực hiện phương thức thể hiện bằng cách cập nhật tệp SampleProtocol.m như hình dưới đây.
#import "SampleProtocol.h"
@implementation SampleProtocol
-(void)startSampleProcess {
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate
selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end
Step 8 - Thêm một UILabel trong ViewController.xib bằng cách kéo nhãn từ thư viện đối tượng vào UIView như hình dưới đây.
Step 9 - Tạo IBOutlet cho nhãn và đặt tên là myLabel và cập nhật mã như sau để áp dụng SampleProtocolDelegate trong ViewController.h.
#import <UIKit/UIKit.h>
#import "SampleProtocol.h"
@interface ViewController : UIViewController<SampleProtocolDelegate> {
IBOutlet UILabel *myLabel;
}
@end
Step 10Triển khai phương thức ủy nhiệm, tạo đối tượng cho SampleProtocol và gọi phương thức startSampleProcess. Tệp ViewController.m được cập nhật như sau:
#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 11Chúng ta sẽ thấy một đầu ra như sau. Ban đầu, nhãn hiển thị "đang xử lý ...", được cập nhật khi phương thức ủy nhiệm được gọi bởi đối tượng SampleProtocol.