【问题标题】:How can I detect a KeyPress event in UITextField?如何在 UITextField 中检测 KeyPress 事件?
【发布时间】:2011-12-24 01:31:17
【问题描述】:

UITextView 中有一个Changed 事件来处理按键。但是UITextField 没有这样的事件。

如何检测UITextField 中的 KeyPress 事件?

here 描述了一种使用通知的方法,但是我遇到的问题是我无法取消订阅 TextFieldTextDidChangeNotification。

【问题讨论】:

    标签: c# ios xamarin.ios uitextfield keypress


    【解决方案1】:

    观察UITextField变化的最简洁方法是

    _textField.AddTarget((sender, e) =>
    {
        // Do your stuff in here
    }, UIControlEvent.EditingChanged);
    

    您不必订阅系统范围的通知中心,也不必在销毁文本字段时取消注册观察者。

    希望这对将来的某人有所帮助:)

    【讨论】:

      【解决方案2】:

      按照 colinta 的建议,这样做

      - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
        NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text);
        return YES;
      }
      

      - (BOOL)textFieldShouldClear:(UITextField *)textField {
        NSLog(@"clear text");
        return YES;
      }
      

      如果通过拼写建议更改了输入,它也可以工作。

      【讨论】:

      • 如果您需要响应文本字段编辑范围之外的按键,这将不起作用。例如,假设您需要捕获单个按键并移动到下一个字段。你不能使用这种方法来做到这一点。您必须使用键盘事件。
      【解决方案3】:

      查看 UITextFieldDelegate

      http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

      实施该协议。它具有所有文本字段更改的回调方法。

      【讨论】:

      • 我可以使用textField:shouldChangeCharactersInRange:replacementString: 方法,该方法 在每次按键时触发,就我所知。不过,令人遗憾的是,您必须研究 replacementString: 的值,因为发送此消息时,textField.text 属性还不会更新。
      【解决方案4】:

      我不确定你的问题是什么。您似乎已经回答了自己的第一个问题,即 解决方案(来自您的链接)是使用NSNotificationCenter.DefaultCenter.AddObserver

      第二个是关于取消订阅 - 如果你想停止观察你应该调用之前的方法对应物,即NSNotificationCenter.DefaultCenter.RemoveObserver

      只需保留从AddObserver 返回的对象,以便将其提供给RemoveObserver

      注意:如果我没有正确理解您的问题,请使用 edit 并添加您想要实现的一些详细信息和/或代码,我们会尽力而为最好的帮助:-)

      【讨论】:

      • 感谢 poupou,我希望可能有更简单的方法。持有从 AddObserver 返回的对象的引用,我能够取消订阅通知
      猜你喜欢
      • 2013-08-23
      • 2012-09-25
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多