以编程方式创建UITextField事件

4

当创建行时,我会通过编程方式将一些文本字段添加到TableView中。 我正在尝试通过以下方式订阅这些文本字段的TouchUpInside事件

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

showPicker是一个没有参数的IBAction。它从未被触发过。我需要做其他什么吗?

我是否漏掉了什么?提前致谢。

3个回答

3

这里应该是 [eTextField addTarget:self action:@selector(showPicker:),同时您还没有分配UIControlEvent。

因此:

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

应该改为

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

1
如果你想要在文本框中显示选择器而不是键盘,你应该将选择器视图指定为文本框的inputView
但如果你想要在用户点击文本框时触发某个方法,你应该重写文本框委托方法

textFieldDidBeginEditing

并调用 resignFirstResponder 以避免键盘,然后编写你的自定义代码或方法调用。

我已经创建了一个单独的视图,并为选择器视图添加了一个“完成”按钮,并正在进行显示和隐藏的动画。您使用inputView的想法似乎更简单,但是我该如何使InputView(现在是aPicker)被解除?将其设置为hidden = YES会使其永远消失。 - irco
当文本字段不是第一响应者时,输入视图将被解除。因此,在“完成”按钮的操作中,只需对文本字段调用'resignFirstResponder'即可。 - Swapnil Luktuke

0
你可以尝试这个...
1.在你的viewController.m文件中重写textFieldDidEndEditing方法。参考下面的示例代码:
-(BOOL)textFieldDidEndEditing:(UITextField*) tf{
 //your piece of code (goNext?)  
}

2.Remove

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

从你的代码中返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接