当 TextField 成为第一响应者时,`controlTextDidEndEditing` 会被触发
Posted
技术标签:
【中文标题】当 TextField 成为第一响应者时,`controlTextDidEndEditing` 会被触发【英文标题】:`controlTextDidEndEditing` gets fired when TextField becomes first responder 【发布时间】:2013-02-22 09:07:29 【问题描述】:我试图通过实现NSTextFieldDelegate
的controlTextDidEndEditing:
方法来检测用户何时完成编辑NSTextField
。然而问题是,在最初使NSTextField
成为窗口的第一响应者时,controlTextDidEndEditing:
通知立即被触发。我在一个非常简单的测试应用程序中尝试了这个并确认了结果。非常感谢一些关于为什么会这样以及如何检测 textField 何时失去焦点的指示。
【问题讨论】:
【参考方案1】:由于 text field 是 first Responder,selectText: 消息也会发送到 textField,这将导致它结束编辑。如果您不希望这种行为设置 NO 为 textField 的可选属性。
- (void)selectText:(id)sender;
结束编辑并选择接收器的全部内容(如果可选择)。
【讨论】:
如果希望实际保持文本字段可选择怎么办?此外,testField 最初也不是第一响应者。它成为第一响应者,并在成为第一响应者时发送controlTextDidEndEditing
通知。真是令人费解
当它进入 firstResponder 状态时,它被要求选择它的文本,所以 selectText: message 将结束编辑。
有没有办法阻止selectText:
消息的发送?或者直接selectText:
而不成为第一响应者?
在文本字段上使用 setSelectable:NO。
您可以在做出第一响应者之前使用setSelectable:NO
,然后再将其改回“是”吗?因为文本字段实际上应该是可选择的。以上是关于当 TextField 成为第一响应者时,`controlTextDidEndEditing` 会被触发的主要内容,如果未能解决你的问题,请参考以下文章
iOS:UIAlertController 上的 textField 成为当前警报时的第一响应者
ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示