创建动态UITextField并添加UIControlEvents.EditingChanged事件:谁给我打电话?

时间:2014-09-04 20:53:42

标签: ios swift uitextfield ios8

我正在动态创建两个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已更改?

1 个答案:

答案 0 :(得分:3)

text_updatedtext_updated:之间的差异很微妙,很容易忘记冒号。

如果要调用func text_updated(sender: UITextField)(至少包含一个参数的方法),则必须将textField目标选择器设置为"text_updated:",如下所示:

inp2.addTarget(view, action:  "text_updated:", forControlEvents: UIControlEvents.EditingChanged)

事实上,当您处理选择器时,规则很简单(来自this Stack Overflow answer):

  

当且仅当方法时,才需要在方法名称后面添加冒号   采取论据。