2014-10-30 65 views
0

我是Xcode的新手,但已經開發了15年。我想了解事件聲明如何在Xcode中工作。這可能是因爲你只能在Ctr拖拽到代碼時聲明?然後只能通過Connection Viewer中的對話框查看它?這會非常煩人。我錯過了什麼?事件肯定會出現在代碼的某處。iOS Swift在代碼中聲明事件

這裏是一個示例函數,它應該聲明「退出結束」代碼。

@IBAction func helloAction(sender: UITextField) { 
    nameLabel.text = "Hi \(sender.text)" 
} 

感謝您的幫助。

回答

0

helloAction方法沒有聲明「退出結束」代碼,除非我誤解了你聲明的意思。 helloAction是一個目標,它在Interface Builder中綁定的控件收到退出結束事件時調用。

這使用了一種在Cocoa中稱爲Target-Action模式的機制。一個控件接收一個事件,然後調用控件接收到該事件時已註冊的任何方法。

這種關係也可以以編程方式創建。考慮以下。

let button = UIButton() 
button.addTarget(self, action: "tapButton:", forControlEvents:UIControlEvents.TouchUpInside) 

當按鈕被點擊,並與觸摸仍按鈕邊界內釋放,selftapButton:方法被調用。

如果您想了解更多關於Cocoa中的Target-Action的信息,請查看來自Apple的high level overviewdefinitive discussion

+0

感謝您的回覆。有沒有辦法不使用IDE來聲明事件? @IBAction func actionFunction(event:TouchUpInside)? – dougburnett 2014-11-02 02:17:42

+0

是的,只需從聲明中刪除'@ IBAction',您將無法通過Interface Builder連接它。然後你被迫以編程方式連接它。因此,在你的原始案例中,當文本字段接收到事件時調用的代碼的方法簽名是'func helloAction(sender:UITextField)',並且你將它與'myTextField.addTarget(self,action:「 helloAction:「,forControlEvents:UIControlEvents.EditingDidEndOnExit)' – rickerbh 2014-11-02 21:19:22

+0

你也不會放棄'@ IBAction'。您可以通過編程方式將它們連接到那裏。 '@ IBAction'只是Interface Builder的一個指示器,該方法應該在IDE UI中公開。 AFAIK它實際上並沒有改變編譯好的代碼。 – rickerbh 2014-11-02 21:20:58