【问题标题】:Get notified when NSTextField resigns first-responder status without subclassing当 NSTextField 在没有子类化的情况下退出第一响应者状态时得到通知
【发布时间】:2012-11-19 22:52:06
【问题描述】:

我有一个NSTextField,我将其添加到自定义视图的视图层次结构中,并设置用户在该自定义视图内单击时的位置。

如果文本字段放弃第一响应者状态,例如因为用户在窗口中单击了另一个NSTextField,所以我需要获取它的值并再次将其从视图层次结构中删除。

我的自定义视图如何获得NSTextField 的通知,它拥有正在辞职的第一响应者状态,而不必仅仅为了这个单一目的而对该文本字段进行子类化?

NSTextFieldDelegate 方法 control:textShouldEndEditing: 不会这样做,因为它只会在用户实际编辑文本字段中的内容时被调用。如果用户没有在其中进行任何编辑,我还需要隐藏文本字段。

【问题讨论】:

    标签: macos cocoa nstextfield first-responder


    【解决方案1】:

    NSTextField 失去焦点可以被捕捉到:

    - (void)controlTextDidEndEditing:(NSNotification *)aNotification
    

    【讨论】:

    • aNotification 包含所有信息...NSLog 并检查 :)
    • 现在我明白了,谢谢!我可能应该更仔细地阅读 Apple 在NSControlTextDidEndEditingNotification 上的文档。我错过了“通知对象是发布通知的NSControl 对象”的部分。
    • 感谢 Anoop - 我只需要将代表连接到文本字段。干杯!
    【解决方案2】:

    还有一个委托方法可以做同样的事情:-

    - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command
    {
        if (command==@selector(insertTab:) || (command==@selector(insertBacktab:)))
        {
          //Your Code
        }
        return YES;
    }
    

    注意:- 它仅适用于 tab 和 backTab 键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多