当 UITextField 成为FirstResponder 时得到通知

Posted

技术标签:

【中文标题】当 UITextField 成为FirstResponder 时得到通知【英文标题】:get notified when UITextField becomeFirstResponder 【发布时间】:2013-01-24 22:19:09 【问题描述】:

UITextFieldbecomeFirstResponder 时我如何获得通知?

我可以像isFirstResponder 一样检查或通过becomeFirstResponder 设置成为第一响应者

我想在用户将此文本字段设为第一响应者时收到通知或处理事件。

谢谢。

【问题讨论】:

【参考方案1】:

您需要成为文本字段的委托并实现此可选委托方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField; 

【讨论】:

【参考方案2】:

除了实现UITextFieldDelegate方法textFieldDidBeginEditing:,您还可以注册UITextFieldTextDidBeginEditingNotification通知。

通知方式可以是:

- (void)someTextFieldDidBeginEditing:(NSNotification *)notification 
    UITextField *textField = (UITextField *)notification.object;

【讨论】:

【参考方案3】:

委托绝对是要走的路。不幸的是,在我的情况下我不能使用它,因为控制器是我的 UITextField 子类的代表,我需要修改它的占位符文本。相反,我重写了方法- (BOOL)canBecomeFirstResponder;- (BOOL)resignFirstResponder;。一定要打电话给super。

【讨论】:

是的,你记得打电话给 super 的评论解决了我的问题。【参考方案4】:

对于 OSX,您应该注意在依赖 NSControlTextDidBeginEditingNotification 时按钮会产生副作用。

当您开始编辑,按一些按钮,然后继续编辑文本字段时,当您继续编辑时,您将不会再收到NSControlTextDidBeginEditingNotification

如果此行为导致问题,UITextFieldTextDidChangeNotification 可能是替代方案。

【讨论】:

以上是关于当 UITextField 成为FirstResponder 时得到通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使键盘 UITextField 中的数字视图成为默认值?

UITableView 单元格中的 UITextField 以编程方式成为FirstResponder

UITextField 成为第一响应者时自动大写键盘

UITextField 不能成为 UITableView 中的第一响应者

UITextField, becomeFirstResponder, resignFirstResponder

成为没有动画的第一响应者