iOS-Delegates
Contoh Perwakilan
Andaikan objek A memanggil B untuk melakukan operasi Setelah operasi selesai, objek A mesti tahu bahawa objek B telah menyelesaikan tugas dan objek A akan melakukan operasi lain yang diperlukan.
Konsep utama dalam contoh di atas ialah
- A ialah objek perwakilan B
- B merujuk kepada A
- A akan melaksanakan kaedah perwakilan B
- B memberitahu
(Perwakilan ) Objek
1. Buat aplikasi paparan tunggal
2 Kemudian pilih Fail -> subkelas SampleProtocol NSObject seperti yang ditunjukkan di bawah
5 Kemudian pilih Buat
6 Tambah protokol ke folder SampleProtocol.h dan kemas kini kod seperti yang ditunjukkan di bawah:
#import <Foundation/Foundation.h>// 协议定义@protocol SampleProtocolDelegate <NSObject>@required- (void) processCompleted;@end// 协议定义结束@interface SampleProtocol : NSObject{ // Delegate to respond back id <SampleProtocolDelegate> _delegate; }@property (nonatomic,strong) id delegate;-(void)startSampleProcess; // Instance method@end
7. Ubah suai fail SampleProto. kod untuk melaksanakan kaedah contoh:
#import "SampleProtocol.h"@implementation SampleProtocol-(void)startSampleProcess{ [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate selector:@selector(processCompleted) userInfo:nil repeats:NO];}@end8 Seret label dari pustaka objek ke UIView untuk menambah UILabel dalam ViewController.xib, seperti yang ditunjukkan di bawah:
9. Buat label IBOutlet dan namakannya myLabel kemas kini kod seperti yang ditunjukkan di bawah dan paparkan SampleProtocolDelegate dalam ViewController.h
#import <UIKit/UIKit.h>#import "SampleProtocol.h"@interface ViewController : UIViewController<SampleProtocolDelegate>{ IBOutlet UILabel *myLabel;}@end
10 Lengkapkan kaedah kebenaran, buat objek untuk SampleProtocol dan panggil kaedah startSampleProcess. Kemas kini fail ViewController.m seperti yang ditunjukkan di bawah
#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
11 Anda akan melihat output seperti yang ditunjukkan di bawah Teg asal akan terus dijalankan Setelah kaedah kebenaran dipanggil oleh objek SampleProtocol, kod tag runner juga akan dikemas kini .