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

时间:2015-02-02 11:18:45

标签: xcode macos swift interface-builder

我最近开始研究一些测试项目,以便通过Xcode了解OS X开发。我来自Windows,所以我在这里可能没有多大意义。

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

让我们说我有一个TextField,当我在运行时更改文本(即键入内容)时,我想在textChanged事件中为该特定TextField执行做某事

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.
        }
    }
}

我已经在Identity Inspector中向TextField控件添加了一个ClassName,但它没有响应文本更改。给出的信息是:

  

无法连接(textField)插座   (Xcode_Action_Basics.ViewController)到(NSTextField):缺少setter   或实例变量

我只是用Google搜索了这个错误并且遇到了这个页面:Failed to connect (storyboard) outlet from (NSApplication) to (NSNibExternalObjectPlaceholder) error in Cocoa and storyboard表明这是Xcode中的一个已知问题,并不代表您的代码存在问题 - 但我不是所以肯定,因为代码不起作用。不确定我是否错过了什么。

1 个答案:

答案 0 :(得分:2)

创建一个实现协议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中分配此课程:

enter image description here