以编程方式创建 UITextField 事件

Posted

技术标签:

【中文标题】以编程方式创建 UITextField 事件【英文标题】:Programmatically create UITextField events 【发布时间】:2011-02-07 02:04:20 【问题描述】:

我在创建行时以编程方式将文本字段添加到 TableView 中。我正在尝试通过这样做来订阅这些 textFields 的 TouchUpInside 事件

UITextField *eTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 12, 145, 25)];
eTextField.delegate = self;
[eTextField addTarget:self action:@selector(showPicker)
forControlEvents:UIControlEventTouchUpInside];

showPicker 是一个没有参数的 IBAction。它永远不会被触发。还有什么我需要做的吗?

我有什么遗漏吗? 提前致谢

【问题讨论】:

【参考方案1】:

不应该是 [eTextField addTarget:self action:@selector(showPicker*:*) 您也没有分配 UIControlEvent。

所以:

[eTextField addTarget:self action:@selector(showPicker)

应该改成

[eTextField addTarget:self action:@selector(showPicker:) forControlEvents:UIControlEventEditingDidBegin];

【讨论】:

【参考方案2】:

如果您尝试为文本字段而不是键盘显示选择器,则应将选择器选择器视图指定为文本字段的inputView

但是如果你想在用户触摸文本字段时触发一些方法,你应该覆盖 文本字段委托方法

textFieldDidBeginEditing

并调用 resign 第一响应者以避免键盘,然后编写您的自定义代码或方法调用。

【讨论】:

我为选择器视图创建了一个带有“完成”按钮的单独视图,并为显示和隐藏设置了动画。您使用inputView 的想法似乎更简单,但我如何让 InputView(现在是 aPicker)被解雇?让它hidden = YES 让它永远消失。 当文本字段不是第一响应者时,输入视图会关闭。所以只需在完成按钮操作中的文本字段上调用“resignFirstResponder”即可。【参考方案3】:

你可以试试这个……

1.在您的viewController.m 文件中覆盖textFieldDidEndEditing。 请看下面的示例代码:

-(BOOL)textFieldDidEndEditing:(UITextField*) tf
 //your piece of code (goNext?)  

2.删除

[eTextField addTarget:self action:@selector(goNext) forControlEvents:UIControlEventEventEditingDidEnd];

来自您的代码。

【讨论】:

以上是关于以编程方式创建 UITextField 事件的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UITextField 隐藏了其他控件

以编程方式创建 UILabel、UITextField 等时的图形错误

有关以编程方式创建UITextField的问题

在 UITableView 重新加载时以编程方式打开/关闭 UITextField 的 inputView

以编程方式在 UIView 上添加 UITextField Swift

以编程方式从 UITextField 接收 UILabel 值