2014-02-17 58 views
1

我一直在線上搜索這個答案,每一篇文章都跳過實際編寫動作代碼的地方。我有一個簡單的交互式UIButton。如果我只能看到一個代碼模板,上面寫着「\爲此處的動作編寫代碼」,那將是超級有用的! (這是爲iPad IOS7)如何添加一個動作到UIButton

這是據我得到...

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
    action:@selector(aMethod:)forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[view addSubview:button]; 

我想我明白這是如何建立一個潛在的作用,但我在哪裏寫的實際行動本身的代碼?

回答

1

我想那種擴展更多的是什麼已經在這裏找到答案,這兩種看法都是正確的,但我想解釋爲什麼/如何工作的。

[button addTarget:self 
    action:@selector(aMethod:)forControlEvents:UIControlEventTouchDown]; 

首先要看的是;該target

目標是一個類的實例,任何類。這個類的唯一要求是它必須實現action

action是您希望在用戶按下按鈕時調用的方法。

@selector(aMethod:)基本上認爲這是一種方法簽名。因爲Objective-c是一種動態語言,所以不需要存在aMethod:,但是如果沒有,程序會崩潰。

因此,如果我們把這一切都在一起,每當我想按這個按鈕:

系統將調用action方法,在target實例。

和方法本身,也可以是這樣的

- (void) aMethod:(id)sender { } 
+0

謝謝!這很有幫助,我是否需要採取進一步措施來將方法聲明爲方法?因爲我得到錯誤「未聲明的標識符」aMethod'「 –

+0

不,你不知道。 請記住,@selector(aMethod :)是一種完全不同的方法,然後是@selector(aMethod)如果這確實是從調試控制檯複製並粘貼的,我建議刪除':(id )選擇器'從你的方法實現。 –

+0

對不起,我失去了一些東西..我沒有「:(id)選擇器」在我的代碼。我失去了如何解決我的「未聲明的標識符」問題。提前致謝!我對這個新的 –

0

你會把行動相關的代碼的方法,在類,命名爲amethod方法:

- (void)aMethod:(id)sender { 
    // your code for the action goes here 
} 

您或許還可能要使用UIControlEventTouchUpInside控件的事件。

+0

謝謝!並且我從一個在線論壇借用了「aMethod」,認爲這是Xcode會認可的。我現在知道它是用戶創建的,我明白一個UIbutton調用方法。這對我意味着什麼?在調用之前是否需要在別處創建方法?我可以將所有內容保存在一頁代碼中嗎? –

+0

這對你來說意味着,就像答案所說的那樣,你需要在同一個.m文件中編寫你自己的aMethod實現,因爲你已經將UIButton的目標設置爲self(這意味着「this object instance」) – Aaron

0

由於您已將目標設置爲self,因此應將aMethod:方法添加到同一個類中。

- (IBAction)aMethod:(id)sender 
{ 
    // do something here 
}