如何为 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 iOS 7 创建弹出式 uipicker 和 uitextfield?