2014-10-30 37 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