2009-10-30 69 views
0

我想將一個變量傳遞給selector中的buttonEvent方法。iPhone:將值傳遞給通過@selector()調用的方法

[button addTarget:messageTableViewController action:@selector(buttonEvent)forControlEvents:UIControlEventTouchUpInside];

如何做到這一點,說如果變量是uid?

方法簽名是 - (void)buttonEvent:(NString *)uid;

回答

0

首先,你需要包括在@selector呼叫冒號:

[button addTarget: messageTableViewController action: @selector(buttonEvent:) forControlEvents: UIControlEventTouchUpInside];

其次,你不能這樣做正是你想要的。傳遞給buttonEvent的參數將永遠是被觸摸的實際控件。您可以使用該控件來確定接下來要做什麼(即,直接使用它,或設置它的標籤並使用它)。

+0

實際上,冒號只在需要傳遞發件人時才需要。控件的目標動作機制支持三種不同的動作選擇器形式(無參數,發件人或發件人和事件)。請參閱http://www.devworld.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 – gerry3

-1

目標動作機制會將動作的發送者發送到選擇器的參數,在你的情況下,被按下的按鈕。我不認爲有任何解決辦法。

你可能會想你的uid與按鈕(在NSDictionary中,例如)相關聯,並在操作方法獲取它,例如:

- (void)buttonEvent:(id)sender 
{ 
    NSDictionary *dict = self.buttonToUidDict; 
    NSString *uid = [dict valueForKey:sender]; 
} 
+1

我的理解是,對象必須實現copyWithZone:(它的類必須符合NSCopying協議)才能用作字典中的鍵(而UIButton不會)。 – gerry3

1
  1. 存儲您所有的按鈕在一個數組中。

  2. 存儲您想要在另一個數組中傳遞的參數。

  3. 使用 - (IBAction爲)myAction:(id)的發送者,並期待您的按鈕陣列(indexOfObject)

  4. 按鈕使用該索引來從你的uid的數組查找你想要的值串並繼續。

另一種方法是將每個UIButton的.tag整數值設置爲一個索引,再次將其設置爲該uid數組。

+0

如果單元格是自定義的,最好的方法是在單元格的屬性中設置當前行索引:http://stackoverflow.com/questions/1639361/uibutton-inside-uitableviewcontroller/1639641#1639641 – gerry3

+1

誰說了些什麼細胞? –

+0

這個問題意味着按鈕位於表格視圖單元格上。 – gerry3

相關問題