2013-07-31 19 views
0

我想對UIButton的操作的@selector中的某個值進行硬編碼。iOS - 用於UIButton操作的選擇器中的硬代碼值

當添加@selector內的值,我得到一個錯誤說: Error

這是你如何正常添加@selectorUIButton

[myButton addTarget:self action:@selector(myFunction::) forControlEvents:UIControlEventTouchDown]; 

這就是我想做的事:

[myButton addTarget:self action:@selector(myFunction:1:) forControlEvents:UIControlEventTouchDown]; 

這怎麼辦?

編輯:rmaddy指出了一個很好的答案在這裏:perfomSelector on button and sending parameters

+0

爲什麼不把1放在myFunction的實現中?如果你很難編碼它,那就沒有必要傳遞它。 – rdelmar

+0

感謝rmaddy,那可能就是我一直在尋找的東西。 –

+1

與你的問題並不真正相關,但我會*高度*建議不要以'myFunction ::'的形式擁有方法簽名。 Objective-C做的一件偉大的事情是允許你的方法簽名說出每個參數是什麼。採用UIColor方法'+ colorWithRed:green:blue:alpha:'而不是'color ::::'閱讀代碼時哪一個更有意義? –

回答

2

你不能做到這一點。在摘要中,選擇器只是一個表示您想要調用的方法名稱的字符串。在這種情況下,框架決定要傳遞給它的內容。

你想用這個完成什麼?根據答案,您可能可以使用對象引用(myButton)本身在您的選擇器方法中進行比較,也可以在按鈕上的方法內設置標記值來代替硬連線數字。

+1

那麼答案就是你不能按照你所說的方式去做。你唯一的選擇是重構你的通用代碼,這樣你就可以傳遞一個參數(例如一個標誌)來表明你是否按下按鈕或從代碼中的其他位置調用它。 – buzzardsoft

0

什麼,我會做的是標籤添加到該按鈕則myButton並將其設置爲1,然後在功能myFunction的ID這樣做:

-(void)myFunction:(UIButton *)button { 
    NSLog(@"%i", button.tag);    // will output 1 
} 

所以選擇應該是這樣的:@selector(myFunction:)

+0

我的函數獲取按鈕的標記,但我從我的代碼中的不同位置調用函數,這就是爲什麼我要硬編碼1,2等。 –

相關問題