例如,咱們要在一個 ViewController 中使用一個ActionSheet,代碼以下:this
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Delegate Example" delegate:self // telling this class to implement UIActionSheetDelegate cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destructive Button" otherButtonTitles:@"Other Button",nil [actionSheet showInView:self.view];
中間的代碼: delegate:self 來告訴當前這個ViewController 來實現 UIActionSheetDelegate
這樣作的緣由是
ViewController 和 ActionSheet 兩者是相互獨立的,可是當用戶點擊了 ActionSheet 上的按鈕時,ViewController 須要處理 ActionSheet 上按鈕的點擊事件,這樣作至關於通知 ViewController 監聽 UIActionSheetDelegate,以便咱們處理 ActionSheet 上按鈕的點擊事件。atom
注意:
delegte:self; 這行代碼僅是告訴 ViewController 實現 UIActionSheetDelegate,可是咱們還須要告訴類實現 UIActionSheetDelegate protocol (協議),方法是在 .h 文件中 加入,以下所示:代理
@interface DelegateExampleViewController : UIViewController <UIActionSheetDelegate>
在CustomClass.h 文件中 首先要爲這個 delegate 定義 protocol (寫在 @interface 以前)
在 protocol 和 end 之間定義 protocol 方法, 這個方法能夠被任何使用這個代理的類所使用code
#import @class CustomClass; //爲Delegate 定義 protocol @protocol CustomClassDelegate //定義 protocol 方法 -(void)sayHello:(CustomClass *)customClass; @end @interface CustomClass : NSObject { } // define delegate property @property (nonatomic, assign) id delegate; // define public functions -(void)helloDelegate; @end
.m 文件中沒什麼特別的,最重要的要實現 helloDelegate 方法事件
-(void)helloDelegate { // send message the message to the delegate! [delegate sayHello:self]; }
接下來咱們切換到要使用這個類的 ViewController ,實現上面剛剛建立的 delegateit
// DelegateExampleViewController.h // import our custom class #import "CustomClass.h" @interface DelegateExampleViewController : UIViewController <CustomClassDelegate> { } @end
在 DelegateExampleViewController.m 文件中,咱們須要初始化這個 custom Class,而後讓 delegate 給咱們傳遞一條消息io
//DelegateExampleViewController.m CustomClass *custom = [[CustomClass alloc] init]; // assign delegate custom.delegate = self; [custom helloDelegate];
仍是在 DelegateExampleViewController.m 咱們要實如今 custom Class.h 中生命的 delegate functionfunction
-(void)sayHello:(CustomClass *)customClass { NSLog(@"Hi!"); }
Bingo!class