2013-03-01 52 views
0

好的問題很快。我使用MKMapAnnotation爲我的iOS添加註釋。我創建了一個int和一個披露按鈕的註釋它調用方法loadPano像這樣:如何將變量傳遞給我使用@selector(methodname)調用的新方法

int integervariable; 
[disclosureButton addTarget:self 
        action:@selector(loadPano) 
      forControlEvents:UIControlEventTouchUpInside];  

現在說我要訪問的方法負載全景整型變量將如何我這樣做,我很努力瞭解如何將變量傳遞給新方法,如上所述。

回答

1

如果您只需傳遞與每個公開按鈕關聯的整數,則可以設置disclosurebutton.tag = integer value;

hacky的種類可以在標籤中傳遞數據,但在簡單情況下它可以工作。

而且這個工作,申報loadpano這樣:

- (void)loadPano:(UIButton*)sender 
{ 
    NSInteger relevantInteger = sender.tag; 
    // More code here 
} 

並設置這樣的目標:

[disclosureButton addTarget:self 
        action:@selector(loadPano:) 
      forControlEvents:UIControlEventTouchUpInside];  

注意,這個方法現在需要一個參數,以便選擇包括一個冒號。

+0

這正是我需要的,但你將如何去訪問在loadPano方法的標籤? – 2013-03-01 17:19:13

+0

剛剛編輯,包括那 – ehope 2013-03-01 17:19:34

+0

完美的伴侶好戲!由於在其他地方發生了變化,我無法將其宣佈爲財產。感謝大家的幫助和其他所有回答! – 2013-03-01 17:30:27

0

您無法在目標操作方法中傳遞sender和eventType以外的值。

該動作消息可以可選地包括髮送者和事件作爲參數,按照該順序。

如果這個integerVariable是一個常量,那麼你可以將它設置爲你從中啓動該操作的控件的標籤(在你的情況下它是揭示按鈕)。

你可以把一個實例變量在類,並訪問loadPano方法的價值。

-1

在一般情況下,您可以使用您的目標,選擇器及其所需的任何參數創建一個NSInvocation的實例。然後調用調用的-invoke方法將消息發送到目標。

+0

這對這個問題有什麼幫助? – newacct 2013-03-01 22:30:26

+0

@newacct OP問題的根源似乎是如何調用一個使用選擇器來獲取參數的方法;問題標題是*如何使用@selector(methodname)*將變量傳遞給我調用的新方法。 「NSInvocation」爲此提供了一個解決方案。我說「在一般情況下」,因爲儘管標題聽起來像OP並沒有真正做出呼叫,但只註冊分配目標和行動。 – Caleb 2013-03-02 02:51:20

+0

看來,OP正試圖將上下文信息傳遞給他的按鈕的回調函數,並且由於API只允許他傳遞目標和選擇器,他錯誤地認爲這需要語言中的一些神奇語法,以允許他「東西「,將上下文信息放入選擇器或將參數」修復「到選擇器。我相信這就是爲什麼他以他所做的方式標題。 – newacct 2013-03-02 03:06:47

1

有幾種解決方案:

  1. 使用標籤。但是這隻能是一個整數。
  2. 將一個實例變量(可能使用屬性訪問)添加到按鈕的類中。這意味着您必須爲該按鈕創建一個自定義類。
  3. 最普遍的:使用相關的對象(又名關聯參考),使用運行時函數objc_setAssociatedObject()objc_getAssociatedObject()
相關問題