如何为 UITextField 设置 inputDelegate?

Posted

技术标签:

【中文标题】如何为 UITextField 设置 inputDelegate?【英文标题】:How to set the inputDelegate for a UITextField? 【发布时间】:2013-07-19 11:57:11 【问题描述】:

我有一个包含 UITextField 的 UIAlertView:

UITextField *textField = [alertView textFieldAtIndex:0];

现在我想为 textField 设置 inputDelegate 属性:

[textField setInputDelegate:self];

我的视图控制器(self)符合 UITextInputDelegate 并且它有方法

- (void)textDidChange:(id<UITextInput>)textInput;

但由于某种原因,当我更改 textField 中的文本时,永远不会调用此方法。所以我假设我的视图控制器没有设置为 textField 的 inputDelegate。

文档说明:

文本输入系统在运行时自动为该属性分配一个委托。采用 UITextInput 协议的视图负责在适当的时刻通知输入委托。

这是否意味着我无法更改文本字段的 inputDelegate?

我怎样才能让 textField 在其内容发生变化时真正在我的视图控制器中调用委托方法textDidChange:

【问题讨论】:

有没有找到解决方案? 我不记得了。我想我最终实现了自己的自定义警报视图类。 【参考方案1】:

我有同样的经验,inputdelegate 永远不会工作。

我已经为你找到了这个页面,

input delegate

但是,为了解决您的问题,我建议您改用委托!

UITextField *textField = [alertView textFieldAtIndex:0];

textField.delegate = self;

【讨论】:

您的建议是创建一个新的 UITextField 并将其委托设置为 self。这不会解决问题,因为 (1) 我想使用 UIAlertView 类提供的 UITextField 和 (2) 我确实设法使用 [textField setDelegate:self] 设置了文本字段的委托,但我无法设置它的 inputDelegate。 [textField setInputDelegate:self] 不起作用。 嗯,你为什么要使用 inputdelegate?文本更改时收到通知? 是的。我知道有文本字段委托方法textField: shouldChangeCharactersInRange: replacementString:,但此方法在文本字段文本的实际更改之前被调用。我需要在 文本更改之后执行测试。 这在 UIAlertView 类中没有实现。见上:“(1)我想利用UIAlertView类提供的UITextField” 所以,我认为带有 textview 的自定义 alertview 可以做到。【参考方案2】:

我不知道如何为UITextField 设置inputDelegate,但您可以观察您的UITextField 的UITextFieldTextDidChange notification,以便在其文本更改后收到通知。

【讨论】:

以上是关于如何为 UITextField 设置 inputDelegate?的主要内容,如果未能解决你的问题,请参考以下文章

弹出键盘时如何为 UITableView 设置动画?

初始化后如何为 UITextField 分配委托?

如何为 iOS 7 创建弹出式 uipicker 和 uitextfield?

如何为所有 PickerViews 创建单个完成和取消按钮?

如何为自定义单元格中的动态附加输入字段添加约束

需要我的 UITextField 有一个直边边框