2015-08-28 21 views
0

在此SO question中,用戶feihu建議採用不同操作的方法作爲TouchUpInside事件的目標。Swift中的UIButton動作消息的正確功能簽名

下面是相關的部分:

[btn addTarget:self action:@selector(btnTouchUp:withEvent:) forControlEvents:UIControlEventTouchUpInside]; 
(void)btnTouchUp:(UIButton *)sender withEvent:(UIEvent *)event { 
    ... 
} 

這個代碼轉換爲斯威夫特已經鬱悶了。

我們嘗試:

button.addTarget(self, action: "buttonTouchUp:", forControlEvents: .TouchUpInside) 
func buttonTouchUp(sender: AnyObject, event: UIEvent) { 
... 
} 

比標準動作消息(具有 sender: UIButton!作爲唯一的參數)其它
button.addTarget(self, action: "buttonTouchUp:", forControlEvents: .TouchUpInside) 
func buttonTouchUp(sender: UIButton!, event: UIEvent) { 
... 
} 

任何生成異常說一個無法識別的選擇被髮送。

在Apple操作消息上搜索其他簽名的Apple文檔不會產生任何結果。我們檢查了UIButtonUIControl類。

我們谷歌搜索UIButton action message,UIControl selector action,UIButton events,UIButton action function signature,和各種變化,但沒有。

我們該如何轉換他的Obj-C代碼?或者我們可以在哪裏找到可用於處理UIButton事件的所有可能操作?

回答

3

您需要更改選擇您使用的設置按鈕時:(動作簽名遵循Cbjective-C語法,你只列出的參數,然後冒號)

button.addTarget(self, action: "buttonTouchUp:event:", 
    forControlEvents: .TouchUpInside) 

func buttonTouchUp(sender: UIButton!, 
    event: UIEvent) { 

+0

呃,非常感謝。新的Swift所以這樣的東西是令人發瘋的。爲了將來的參考,如果你像我們一樣並試圖找到答案,你會使用谷歌搜索嗎? – Crashalot

+1

「Swift IBAction方法簽名」可能嗎? –

+0

謝謝!我們嘗試了類似的東西('UIButton動作函數簽名'),但找不到任何東西。你比Google好。 :) – Crashalot