【问题标题】:How to set the inputDelegate for a UITextField?如何为 UITextField 设置 inputDelegate?
【发布时间】: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:

【问题讨论】:

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

标签: ios delegates uitextfield uialertview uitextinput


【解决方案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,但您可以观察您的UITextFieldUITextFieldTextDidChange notification,以便在其文本更改后收到通知。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多