如何在 Xcode 中订阅 TextField 的 TextChanged 事件

How do I subscribe to TextField's TextChanged event in Xcode

我最近开始从事一些测试项目,以感受使用 Xcode 进行 OS X 开发的感受。我来自 Windows,所以我在这里可能没有多大意义。

我如何订阅 Swift 中的某些 "events"?我刚刚学会了如何将动作连接到 UI 对象。例如,我现在可以单击一个按钮,并以编程方式更改标签的文本。但是,这可能只是我缺乏知识的情况 - 我无法找到订阅 TextField 的 "Text Changed" 事件的方法。

假设我有一个 TextField,当我在运行时更改文本(即键入内容)时,我想在该特定 TextField 的 textChanged 事件中做一些事情 .

在 OS X 开发中甚至有 TextChanged 事件这样的东西吗?

更新


我现在使用以下代码:

import Cocoa

class ViewController: NSViewController {

    class textField:NSTextField, NSTextFieldDelegate
    {
        override func awakeFromNib() {
            delegate = self;
        }

        override func controlTextDidChange(obj: NSNotification)
        {
            println("Text changed.")
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

并且我已将类名添加到身份检查器中的 TextField 控件,但它不响应文本更改。给出的消息是:

Failed to connect (textField) outlet from (Xcode_Action_Basics.ViewController) to (NSTextField): missing setter or instance variable

我刚刚用谷歌搜索了那个错误并发现了这个页面:Failed to connect (storyboard) outlet from (NSApplication) to (NSNibExternalObjectPlaceholder) error in Cocoa and storyboard 指出这是 Xcode 中的一个已知问题,并不意味着您的代码有问题 - 但我不太确定,因为代码不起作用。不确定我是否错过了什么。

创建一个 class 实现协议 NSTextFieldDelegate 就像

class MyTextField:NSTextField, NSTextFieldDelegate {
  override func awakeFromNib() {
    delegate = self // tell that we care for ourselfs
  }
  override func controlTextDidChange(obj: NSNotification) {
    //  .... handle change, there are a lot of other similar methods. See help
  }
}

在 IB 中分配此 class 此处: