[xcode] Delegate使用


Delegate 光看字面,其實很難理解到底是怎麼一回事。

有些時候甚至看了程式碼,也搞不清楚到底是怎樣作用,

所以這邊就來講解一下。

下面是.h


當我們要在ViewController 裡面使用tableview 時候 就需要把tableview delegate給

叫進來,並且在.m中要把

tableview.delegate = self;  
tableview.dataSource = self;

接著要宣告相關的副程式

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath();

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section();


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView();


以上就是tableview 必須要的,所以uitableviewdelegate就是一個delegate範例。


所以delegate就是你把想做的事情寫在裡面,當你想用的時候,把數值或資料丟進去

然後他會回送做完的結果。


因此當你有一段程式碼是需要常常被使用到,並且要將結果回傳的,那就必須要用delegate

,而且你也可以自己寫delegate。



接著就來寫個自己的delegate



storyboard部分一樣為兩個viewcontroller

viewcontroller.h

import viewcontroller2.h  匯入要載入的頁面,並且把delegatev2給加進來

這邊將viewcontroller2 宣告為view2


viewcontroller.m

前面一大段是按鈕跟label的初始化,後面兩行是初始化viewcontroller2 指定他在

storyboard的ID,並且指定delegatev2為self。


按鈕事件 用來載入下一頁


delegate為接收到值後去改變label值




viewcontroller2.h

protocol delegatev2 這邊用來宣告,當使用delegate時候 需要執行哪些

-(void)data:(nsinteger)x; 這邊用來傳數值,看你需要回傳的資料是什麼,可以自己編寫




viewcontroller2.m

-(void)viewdidload();裡面是按鈕初始化

-(ibaction)actionback()
在按鈕回上一頁的事件裡頭,將回傳值data的數值放入99





一開始執行時,label值為100


當按下按鈕進入下一頁,並且返回時候,label數值會變成99



這是一個簡單的delegate的使用,從viewcontroller2 把值傳回viewcontroller

,當然delegate並不見得一定是2個viewcontroller 也可以是nsobject 或者其他的class都

行,至於要如何用,就看使用的架構是怎樣。


另外在寫程式的時候,可以先從viewcontroller2開始,因為xcode有關聯輸入

如果你的viewcontroller2 還沒完成delegate的規劃,就不會有關聯輸入選項出現。




沒有留言:

張貼留言