我正在动态创建两个TextField并将它们添加到EditingChanged事件中,如下例所示
import UIKit
var view:UIView = UIView()
let inp1:UITextField = UITextField(frame: CGRect(x: 20, y: 0, width: 100, height: 44))
inp1.addTarget(view, action: "text_updated", forControlEvents: UIControlEvents.EditingChanged)
let inp2:UITextField = UITextField(frame: CGRect(x: 20, y: 50, width: 100, height: 44))
inp2.addTarget(view, action: "text_updated", forControlEvents: UIControlEvents.EditingChanged)
view.addSubview(inp1)
view.addSubview(inp2)
func text_updated(){
println("who has called me?")
}
因为没有办法知道哪个控件调用了text_updated函数。
当我将TextField作为参数传递时
func text_updated(sender: UITextField) {
}
我收到“无法识别的选择器发送到实例”异常。
如何知道哪个TextField已更改?
答案 0 :(得分:3)
text_updated
和text_updated:
之间的差异很微妙,很容易忘记冒号。
如果要调用func text_updated(sender: UITextField)
(至少包含一个参数的方法),则必须将textField目标选择器设置为"text_updated:"
,如下所示:
inp2.addTarget(view, action: "text_updated:", forControlEvents: UIControlEvents.EditingChanged)
事实上,当您处理选择器时,规则很简单(来自this Stack Overflow answer):
当且仅当方法时,才需要在方法名称后面添加冒号 采取论据。