2012-11-14 27 views
0

當我試圖鏈接到我的UIButton的方法只有一個參數時,我可以調用addTarget並且當按鈕被單擊時我的代碼成功運行 -使用帶有兩個參數的UIButton addTarget時無法識別的選擇器

[ myDetailButton addTarget:self action:@selector(hideMap:) forControlEvents:UIControlEventTouchUpInside]; 

(void)hideMap:(NSMutableArray*)arguments 

,但如果我添加第二個參數來我hideMap方法,我打電話時,得到一個無法識別的選擇錯誤:

[ myDetailButton addTarget:self action:@selector(hideMap:) forControlEvents:UIControlEventTouchUpInside]; 

(void)hideMap:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options 

我看到這個錯誤不管我怎麼格式化每this question的addTarget參數 - -

action:@selector(hideMap) 
action:@selector(hideMap:) 
action:@selector(hideMap:event:) 

如何使用addTarget調用具有多個參數的方法?

回答

2

你是問題是你給一個選擇器,期待一個NSMutableArray作爲輸入與字典。 UIButton不同意這一點。根據您鏈接的帖子,UIBUtton僅同意發送任何內容,本身作爲ID,或者本身和事件。

我不是100%確定你是如何期待從UIButton回調中獲得NSMutableArray和NSMutableDictionary的,你究竟在做什麼,我可能會提供一些幫助。

+0

所以你說我正在嘗試做的 - 調用一個具有多個參數的方法 - 使用UIButton的addTarget是不可能的?那麼最好的方法是添加一箇中間方法,它將使用默認參數調用操作方法? –

+2

您可以爲'addTarget'中使用的選擇器設置0,1或2個參數。但是你不能選擇參數。他們是固定的。發件人(按鈕)總是第一個,事件總是第二個。請記住,這是控制事件發生時調用您的方法的框架。它無法知道要傳遞一些你想要的任意數據。它只是說「事件發生」和控制。然後,您必須使用它來調用您需要的任何其他參數的任何其他方法。 – rmaddy

+0

+1 maddy,很好的迴應。 @ storm_m2138添加一箇中間方法是你想要的。例如按鈕 - >按鈕回調 - >您的自定義方法 – Bergasms

1

的問題是你的方法是:

-(void)hideMap:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options 

而且方法名是hideMap:withDict:hideMap:event:

將此代碼action:@selector(hideMap:event:)更改爲action:@selector(hideMap:withDict:)它會解決您的問題。

沒有像這樣的方法:hideMap:event:這是問題。

相關問題