1. 程式人生 > >iOS中自定義delegate的實現

iOS中自定義delegate的實現

        在iOS開發中經常會用到delegate,無論是檢視、控制元件,還是不同頁面之間傳值等等。

        通常,我們需要自定義delegate實現,以下簡單介紹自定義delegate的步驟

1.定義delegate的protocol檔案

        假如SettingsViewController類需要委託MainViewController類實現自身協議方法。

        首先,在標頭檔案SettingsViewController.h檔案中新增如下內容:

        //  宣告協議名稱和方法

        @protocol buttonDelegate

        @required

        -(void)settingsButtonTapped;

        -(void)bookmarksButtonTapped;

        @optional 

        -(void)doubleClick;

        -(void)fastForward;

        @end

        // delegate屬性

        @property (assign, nonatomic)id<buttonDelegate>delegate;

        @end

@protocl 後的MainViewDelegate則為自定義delegate名,受委託類需要引用該名字

其中@required標識其下面的函式定義為必須實現方法,類似c++中如果我們定義了純需函式,則其子類必須定義純虛擬函式內容。而@option則標識其下面的函式為可選實現方法,類似c++開發中的虛擬函式,其子類無需一定要定義虛擬函式的內容。

       然後在觸發的地方新增:

[delegate settingsButtonTapped];

[delegate  bookmarksButtonTapped];

2.在受委託類的標頭檔案MainViewController.h中定義

#import "SettingsViewController.h"

        @interface MainViewController : UIViewController

<buttonDelegate>

        {

               MainView *_contentView;
               SettingsViewController   *_settingsViewController;  

          }

在類定義中使用“<>”符號作為deleate的名字。

3.最後在類的實現檔案MainViewController.m中定義該delegate中必須定義的函式內容:

        @implementation 

        - (void)viewDidLoad

       {

 _settingsViewController.delegate = self;      // 置委託物件,SettingsViewController委託MainViewController

        }

       // 實現委託方法

        - (void)settingsButtonTapped 

       {

            ......

        }
- (void)bookmarksButtonTapped 

        {
             ......
         }

好了,自定義delegate就完成了.