首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建动态UITextFields和添加UIControlEvents.EditingChanged事件:谁给我打了电话?

创建动态UITextFields和添加UIControlEvents.EditingChanged事件:谁给我打了电话?
EN

Stack Overflow用户
提问于 2014-09-04 20:53:41
回答 1查看 1.1K关注 0票数 0

我正在动态创建两个TextFields,并将它们添加为EditingChanged事件,如下例所示

代码语言:javascript
复制
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作为参数传递时

代码语言:javascript
复制
func text_updated(sender: UITextField) {

}

我得到一个“未识别的选择器被发送到实例”异常。

怎么可能知道哪个TextField被更改了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-04 22:14:51

text_updatedtext_updated:之间的区别是微妙的,很容易忘记冒号。

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

代码语言:javascript
复制
inp2.addTarget(view, action:  "text_updated:", forControlEvents: UIControlEvents.EditingChanged)

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

在方法名称之后需要冒号当且仅当该方法接受一个参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25674824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档