自我整理了下有關代理的知識,說到代理每次都覺得這東西有些麻煩,步驟很多,不過畢竟它很實用,所以還是要好好整理下。
重點:本文實現(xiàn)效果:監(jiān)聽cell內部按鈕被點擊后實現(xiàn)某些功能
代碼相關Demo已上傳至github上 傳送門:jinmingzzx關于代理的Demo?
使用代理設計模式,仿照tableView代理 給控制器設置代理并監(jiān)聽cell內部按鈕被點擊后實現(xiàn)某些功能
說道代理離不開以下6步:
//制作步驟
1.寫協(xié)議(協(xié)議方法)
2.定義代理屬性(屬性遵守協(xié)議)
3.調用協(xié)議中的方法
//使用步驟
4.遵守協(xié)議
5.設置代理
6.實現(xiàn)協(xié)議中的方法
下面直接上代碼
首先 我們使用xib自定義一個cell cell上加兩個按鈕加號按鈕與減號按鈕 用于監(jiān)聽使用
第一步 如圖 我們在cell的.h文件中 寫協(xié)議 具體內容如下:
@protocol? JMCustomCellDelegate<NSObject>
具體方法如上圖
@end
內部兩個協(xié)議方法 分別為加號被點擊 減號被點擊時觸發(fā)的方法 這里仿照tableView代理方法書寫,感興趣的同學可以去tableView Delegate方法中尋找
這里解釋下
@class JMCustomCell; 是因為協(xié)議方法中需要使用 所以聲明
@optional 表示該方法非必須實現(xiàn),如果不寫的話默認為 @required
<NSObject>為基協(xié)議
第二步 定義代理屬性(并遵守協(xié)議)
這里解釋下
代理使用weak修飾
使用id類型是為了解除耦合性 使任何類型的對象都可以成為該cell的代理
第三步 調用代理方法
在cell.m文件中 我們使用拖線的方法 給出兩個按鈕的點擊方法
這里解釋下:
[self.delegate respondsToSelector:@selector(jmCustomCellMinusBtDidClickWithCustomCell:)]方法是為了判斷方法是否被響應,這里如果我們在第六部中 沒有實現(xiàn)jmCustomCellMinusBtDidClickWithCustomCell:方法而且又沒有給出以上if判斷,程序會崩潰,報沒有找到該方法的錯誤,該方法是配合第一步@optional使用的,目的就是判斷方法是否被響應
核心方法為[self.delegate jmCustomCellMinusBtDidClickWithCustomCell:self];即(調用代理方法)
使用步驟
第四步 遵守協(xié)議
在rootViewController.m文件中 遵守協(xié)議
第五步 設置代理
這里我們將viewController設置為cell的代理
第六步 實現(xiàn)協(xié)議方法
第六步 大功告成
這里解釋下 viewController代理 監(jiān)聽到被點擊的按鈕 并通過協(xié)議獲得了 被點擊的按鈕的cell
這里我們 可以使用tableview的indexPathForCell方法獲取到cell的具體位置即 index
至此我們使用代理模式 監(jiān)聽到cell內部的button的點擊事件
以下是demo的使用結果
當點擊?時候
當點擊?時
以上代碼已經上傳至Gayhub以供大家查看使用https://github.com/jinmingzzx/jmTestDemo? ,歡迎各位同學給出意見指點,感謝收看!!!