寫代碼的過程中遇到需要將參數(shù)傳入到代理方法中去的情況,在網(wǎng)上搜索了一下,現(xiàn)在整理下可以用到的方法。
通常我們需要在下面的alertView代理方法中處理Button點(diǎn)擊事件屡久。
-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{}
如果此時想傳入?yún)?shù)到這個方法中,然后再做相應(yīng)的處理爱榔。
我們可以選用的方法有:
①如果需要傳入的參數(shù)比較簡單可以轉(zhuǎn)化為整數(shù)類型被环,那么可以選擇將這個參數(shù)置為alertView的tag。
②考慮將參數(shù)設(shè)為全局變量或成員變量详幽。
③利用對象關(guān)聯(lián)(associated objects)(此方法不推薦使用)筛欢,具體做法如下:
首先,#import<objc/runtime.h>??頭文件
設(shè)置關(guān)聯(lián):objc_setAssociatedObject來把一個對象與另外一個對象進(jìn)行關(guān)聯(lián)唇聘。
void objc_setAssociatedObject(id object,const void* key,id value,objc_AssociationPolicy policy);
四個參數(shù):object :源對象(此處為alert對象)
? ? ? ? ? ? ? ? key ? ? :關(guān)聯(lián)的關(guān)鍵字
? ? ? ? ? ? ? ? value ?:關(guān)聯(lián)的對象
? ? ? ? ? ? ? ? policy :關(guān)聯(lián)策略版姑。
獲取相關(guān)聯(lián)的對象: objc_getAssociatedObject(用于在代理方法中獲取對象)
id objc_getAssociatedObject(id object, void *key);
④擴(kuò)展NSObject,加個userInfo雳灾。