iOS學習筆記3---delegate五步曲,輕鬆學會使用delegate

jingxianli0922發表於2015-11-05

委託delegation是一種簡單但是功能強大的設計模式,它的功能是程式中一個物件代表另一個物件,或者一個物件與另外一個物件協同工作。委託物件保留了另外一個物件的引用,即就是委託,以及在合適的時候傳送訊息給委託。訊息通知事件的委託方法,委託物件將要處理或已經處理。委託可能通過更新本身或者本應用的其他物件的狀態或者外觀來對訊息進行響應,在某些情況下委託也可能返回值,從而影響即將發生事件的處理方式。委託模式的主要價值是讓你通過一箇中心物件,簡單的自定義某些物件的行為。下圖為官方文件的解釋:


在iOS開發中,要搞清楚Delegate或者學會使用Delegate是需要一個過程的。我在學習iOS過程中,最開始對Delegate很不解,隨著專案經驗的增長,慢慢對Delegate有了比較清楚的理解。Delegate本來是軟體架構設計的一種理念。它是為了使檢視之間的邏輯關係更加清晰,檢視之間的關係,不僅僅是跳轉,更重要的是檢視之間資料傳遞。

一般在什麼情況下,需要使用Delegate。當檢視A發生變化時,需要將這個變化告知檢視B,讓檢視B做出相應的反應時,一般這個時候我們就需要使用Delegate。下面舉例說明:

                          

   這是一個toolbar控制元件(如上圖紅色區域所示),toolbar控制元件包含拍照、相簿、@、#、表情鍵盤與系統自帶鍵盤切換等功能。當我們選中拍照、相簿、@、#、表情鍵盤與系統自帶鍵盤切換(WBComposeToolBar檢視)按鈕時,檢視控制器(WBComposeViewController)需要根據按下的按鈕來呼叫不同的功能。這時需要解決的問題是當點選WBComposeToolBar檢視的按鈕進行切換裡,讓Delegate告知WBComposeViewController檢視。

通常一個delegate的使用過程,需要5步:

     1.建立一個delegate;

     2.委託者宣告一個delegate;

     3.委託者呼叫delegate內的方法(method);

     4.被委託者設定delegate,以便被委託者呼叫;

     5.被委託者實現Delegate所定義的方法。

接下來,我們結合專案的程式碼對Delegate的使用過程進行詳細說明:

1.1  第一步:建立一個deleagte,在WBComposeToolBar.h檔案中,通過@protocol建立一個delegate,並宣告可選一個委託方法

@protocol WBComposeToolBarDelegate <NSObject>

@optional
-(void)composeWithBar:(WBComposeToolBar *)toolbar didClickbtn:(HWComposeToolbarButtonType)type;
@end
@optional表明,這個方法是可以不實現的,是可選的。

1.2第二步:委託者宣告一個delegate

@property (nonatomic,weak) id<WBComposeToolBarDelegate> delegate;
1.3第三步:委託者呼叫delegate的方法

-(void)btnclick:(UIButton *)btn
{ 
    if ([self.delegate respondsToSelector:@selector(composeWithBar:didClickbtn:)]) {
        [self.delegate composeWithBar:self didClickbtn:btn.tag];
    }
}
1.4第四步:被委託者設定delegate

self.toolBar.delegate = self;
1.5第五步:被委託者實現delegate所定義的方法。

-(void)composeWithBar:(WBComposeToolBar *)toolbar didClickbtn:(HWComposeToolbarButtonType)type
{
    switch (type) {
        case HWComposeToolbarButtonTypeCamera:// 拍照
            [self openCamera];
            break;
        case HWComposeToolbarButtonTypePicture://相簿
            [self openAlbum];
            break;
        case HWComposeToolbarButtonTypeMention://@
            break;
        case HWComposeToolbarButtonTypeTrend: //#
            break;
        case HWComposeToolbarButtonTypeEmotion: //表情、鍵盤
            [self switchKeyboard];
            break;
    }
}
通過上面的五步,我們能清楚的看到Delegate是用來實現不同檢視之間的資料互動。

原始碼下載地址:http://download.csdn.net/detail/jasonjwl/9243939

相關文章