如何在 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 此处:
我最近开始从事一些测试项目,以感受使用 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 此处: