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
melalui kaedah perwakilan melalui

(Perwakilan ) Objek

1. Buat aplikasi paparan tunggal

2 Kemudian pilih Fail -> subkelas SampleProtocol NSObject seperti yang ditunjukkan di bawah

addNewFile

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: setProtocolName

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

8 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 . delegateLabel