我正在动态创建两个TextFields,并将它们添加为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被更改了?
发布于 2014-09-04 22:14:51
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):
在方法名称之后需要冒号当且仅当该方法接受一个参数。
https://stackoverflow.com/questions/25674824
复制相似问题