iOS代理的簡單使用(監(jiān)聽cell內部按鈕點擊事件)

自我整理了下有關代理的知識,說到代理每次都覺得這東西有些麻煩,步驟很多,不過畢竟它很實用,所以還是要好好整理下。

重點:本文實現(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é)議中的方法

下面直接上代碼


第一步 寫一個協(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é)議

第四步 遵守協(xié)議

第五步 設置代理

第五步 設置代理

這里我們將viewController設置為cell的代理


第六步 實現(xiàn)協(xié)議方法

第六步 實現(xiàn)協(xié)議方法

第六步 大功告成

這里解釋下 viewController代理 監(jiān)聽到被點擊的按鈕 并通過協(xié)議獲得了 被點擊的按鈕的cell

這里我們 可以使用tableview的indexPathForCell方法獲取到cell的具體位置即 index

至此我們使用代理模式 監(jiān)聽到cell內部的button的點擊事件

以下是demo的使用結果

當點擊?時候

當點擊?時

以上代碼已經上傳至Gayhub以供大家查看使用https://github.com/jinmingzzx/jmTestDemo? ,歡迎各位同學給出意見指點,感謝收看!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容