我正在动态创建两个 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?
最佳答案
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 ):
The colon is needed after the method's name if and only if the method takes an argument.
关于ios - 创建动态 UITextFields 并添加 UIControlEvents.EditingChanged 事件 : who called me?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674824/