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。
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的規劃,就不會有關聯輸入選項出現。
如果你的viewcontroller2 還沒完成delegate的規劃,就不會有關聯輸入選項出現。
沒有留言:
張貼留言