آموزش Delegate در iOS
آموزش Delegate در iOS
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش Delegate در iOS خواهیم پرداخت.
مثال Delegate
بیایید فرض کنیم یک شی A برای انجام عملی یک شی B را فراخوانی می کند. پس از کامل شدن عمل، جسم A باید بداند که B کار را به اتمام رسانده و اقدامات لازم را انجام دهد. این امر با کمک Delegates حاصل می شود.
مفاهیم کلیدی در مثال بالا عبارتند از:
A یک شی deleg نماینده از B است.
B مرجع A خواهد داشت.
A روش های نمایندگی B را پیاده سازی می کند.
B از طریق روش های تفویضی به A اطلاع می دهد.
مراحل ایجاد Delegate
مرحله 1 – ابتدا یک برنامه view single ایجاد کنید.
مرحله 2 – سپس File → New → File را انتخاب کنید …
مرحله 3 – سپس Objective C Class را انتخاب کرده و Next را کلیک کنید.
مرحله 4 – برای کلاس نام تعیین کنید، مثلا SampleProtocol با زیر کلاس به عنوان NSObject.
مرحله 5 – سپس select کنید.
مرحله 6 – یک پروتکل به فایل SampleProtocol.h اضافه کنید و کد به روز شده به شرح زیر است –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#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 |
مرحله 7 – روش نمونه را با به روزرسانی فایل SampleProtocol.m مانند تصویر زیر پیاده سازی کنید.
1 2 3 4 5 6 7 8 9 |
#import "SampleProtocol.h" @implementation SampleProtocol -(void)startSampleProcess { [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate selector:@selector(processCompleted) userInfo:nil repeats:NO]; } @end |
مرحله 8 – با درگ کردن برچسب از کتابخانه شی به UIView ، یک UILabel در ViewController.xib اضافه کنید همانطور که در زیر نشان داده شده است
مرحله 9 – یک IBOutlet برای برچسب ایجاد کنید و نام آن را myLabel بگذارید و کد را به صورت زیر به روز کنید تا SampleProtocolDelegate را در ViewController.h اتخاذ کنید
1 2 3 4 5 6 7 |
#import <UIKit/UIKit.h> #import "SampleProtocol.h" @interface ViewController : UIViewController<SampleProtocolDelegate> { IBOutlet UILabel *myLabel; } @end |
مرحله 10 روش delegate را پیاده سازی کنید ، برای SampleProtocol شی ایجاد کنید و روش startSampleProcess را فراخوانی کنید. فایل ViewController.m به روز شده به شرح زیر است
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#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 ما یک خروجی به شرح زیر خواهیم دید. در ابتدا برچسب “processing…” را نشان می دهد ، که به محض فراخوانی روش تفویض توسط شی SampleProtocol به روز می شود.
دیدگاه شما