【问题标题】:How to make NSTextfield lose focus when Enter is pressed?按下 Enter 时如何使 NSTextfield 失去焦点?
【发布时间】:2014-04-01 22:34:27
【问题描述】:

我想创建一个文本字段,如果我在其中单击或按 Enter 键,它会失去焦点。由于对焦环消失。我见过这样的情况,但我不知道在哪里放置代码。谁能告诉我如何让 NSTextfield 失去焦点?

【问题讨论】:

    标签: objective-c xcode macos nstextfield


    【解决方案1】:

    一种方法是实现 NSTextFieldDelegate,将委托分配给您的文本字段,并让它调用一个选择器(代码中的一个更改方法使第一响应者 = nil)。当文本字段完成接收输入时,将使用消息调用委托。在此处查看 API 以了解更多信息:

    https://developer.apple.com/library/mac/documentation/cocoa/reference/NSTextFieldDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSTextFieldDelegate

    【讨论】:

      【解决方案2】:

      对于像我这样懒惰的人,这里有一些代码。

      这是我使用的精简的 NSTextfieldDelegate 方法:

      func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
          DispatchQueue.main.async {
              self.textField2.window?.makeFirstResponder(nil)
          }
          return true
      }
      

      https://developer.apple.com/documentation/appkit/nstextview/1807135-resignfirstresponder?language=objc

      resignFirstResponder Docu 说:

      使用 NSWindow 方法 makeFirstResponder:,而不是这个方法,使 文本查看第一响应者。切勿直接调用此方法。

      // don't use this as the name may suggest (at least it did for me)
      self.textField2.resignFirstResponder()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2013-08-13
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多