我最近开始研究一些测试项目,以便通过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中的一个已知问题,并不代表您的代码存在问题 - 但我不是所以肯定,因为代码不起作用。不确定我是否错过了什么。
答案 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中分配此课程: