我想將一個變量傳遞給selector中的buttonEvent方法。iPhone:將值傳遞給通過@selector()調用的方法
[button addTarget:messageTableViewController action:@selector(buttonEvent)forControlEvents:UIControlEventTouchUpInside];
如何做到這一點,說如果變量是uid?
方法簽名是 - (void)buttonEvent:(NString *)uid;
我想將一個變量傳遞給selector中的buttonEvent方法。iPhone:將值傳遞給通過@selector()調用的方法
[button addTarget:messageTableViewController action:@selector(buttonEvent)forControlEvents:UIControlEventTouchUpInside];
如何做到這一點,說如果變量是uid?
方法簽名是 - (void)buttonEvent:(NString *)uid;
首先,你需要包括在@selector呼叫冒號:
[button addTarget: messageTableViewController action: @selector(buttonEvent:) forControlEvents: UIControlEventTouchUpInside];
其次,你不能這樣做正是你想要的。傳遞給buttonEvent的參數將永遠是被觸摸的實際控件。您可以使用該控件來確定接下來要做什麼(即,直接使用它,或設置它的標籤並使用它)。
目標動作機制會將動作的發送者發送到選擇器的參數,在你的情況下,被按下的按鈕。我不認爲有任何解決辦法。
你可能會想你的uid與按鈕(在NSDictionary中,例如)相關聯,並在操作方法獲取它,例如:
- (void)buttonEvent:(id)sender
{
NSDictionary *dict = self.buttonToUidDict;
NSString *uid = [dict valueForKey:sender];
}
我的理解是,對象必須實現copyWithZone:(它的類必須符合NSCopying協議)才能用作字典中的鍵(而UIButton不會)。 – gerry3
存儲您所有的按鈕在一個數組中。
存儲您想要在另一個數組中傳遞的參數。
使用 - (IBAction爲)myAction:(id)的發送者,並期待您的按鈕陣列(indexOfObject)
按鈕使用該索引來從你的uid的數組查找你想要的值串並繼續。
另一種方法是將每個UIButton的.tag整數值設置爲一個索引,再次將其設置爲該uid數組。
實際上,冒號只在需要傳遞發件人時才需要。控件的目標動作機制支持三種不同的動作選擇器形式(無參數,發件人或發件人和事件)。請參閱http://www.devworld.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 – gerry3