ios - 创建动态 UITextFields 并添加 UIControlEvents.EditingChanged 事件 : who called me?

标签 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?

最佳答案

text_updatedtext_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/

相关文章:

ios - 如何在 swift 4 中正确使用选择器

ios - 如何在 Swift 中将数据从外部数据库填充到 UItableView

ios - 添加注释时 Mapkit 崩溃

ios - 清除文本后如何在 TextFields 中添加 PlaceHolder

xcode - swift Xcode 6 : How do I use multiple functions in one statement?

ios - 如果所有文本字段都在ios中填写,则启用按钮

ios - 来自另一个类的 collectionView IBOutlet 始终是空可选

ios - Swift 错误,无法将类型 Int 转换为 int 16

ios - 印象笔记 session authenticateWithViewController :completionHandler: does not trigger completionHandler

ios - 忽略与开发者证书相关的project.pbxproj更改