【问题标题】:`controlTextDidEndEditing` gets fired when TextField becomes first responder当 TextField 成为第一响应者时,`controlTextDidEndEditing` 会被触发
【发布时间】:2013-02-22 09:07:29
【问题描述】:

我试图通过实现NSTextFieldDelegatecontrolTextDidEndEditing: 方法来检测用户何时完成编辑NSTextField。然而问题是,在最初使NSTextField 成为窗口的第一响应者时,controlTextDidEndEditing: 通知立即被触发。我在一个非常简单的测试应用程序中尝试了这个并确认了结果。非常感谢一些关于为什么会这样以及如何检测 textField 何时失去焦点的指示。

【问题讨论】:

    标签: cocoa nstextfield first-responder


    【解决方案1】:

    由于 text field 是 first Responder,selectText: 消息也会发送到 textField,这将导致它结束编辑。如果您不希望这种行为设置 NO 为 textField 的可选属性。

    - (void)selectText:(id)sender;
    

    结束编辑并选择接收器的全部内容(如果可选择)。

    【讨论】:

    • 如果希望实际保持文本字段可选择怎么办?此外,testField 最初也不是第一响应者。它成为第一响应者,并在成为第一响应者时发送controlTextDidEndEditing 通知。真是令人费解
    • 当它进入 firstResponder 状态时,它被要求选择它的文本,所以 selectText: message 将结束编辑。
    • 有没有办法阻止selectText: 消息的发送?或者直接selectText:而不成为第一响应者?
    • 在文本字段上使用 setSelectable:NO。
    • 您可以在做出第一响应者之前使用setSelectable:NO,然后再将其改回“是”吗?因为文本字段实际上应该是可选择的。
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多