Xcode 9.2。使用Swift 4.0.3。
必须通过接口构建器连接NSTextField才能使此实现正常工作。
import Cocoa @objc public class MyWindowController: NSWindowController, NSTextFieldDelegate { @IBOutlet weak var myTextField: NSTextField! // MARK: - ViewController lifecycle - override public func windowDidLoad() { super.windowDidLoad() myTextField.delegate = self } // MARK: - NSTextFieldDelegate - public override func controlTextDidChange(_ obj: Notification) { // check the identifier to be sure you have the correct textfield if more are used if let textField = obj.object as? NSTextField, self.myTextField.identifier == textField.identifier { print("\n\nMy own textField = \(self.myTextField)\nNotification textfield = \(textField)") print("\nChanged text = \(textField.stringValue)\n") } }
}
控制台输出:
My own textField = Optional(<myApp.NSTextField 0x103f1e720>) Notification textfield = <myApp.NSTextField: 0x103f1e720> Changed text = asdasdasddsada
我相信你想读一读 现场编辑 这本质上是一个(隐藏的) NSTextView 处理所有的文本输入 NSTextField 在给定的窗口中。关于 “使用字段编辑器进行委派和通知” 应该指出你正确的方向。
NSTextView
NSTextField
在Swift中它是
public override func controlTextDidChange(_ obj: Notification) { }
你应该用 NSTextFieldDelegate 并实施 controlTextDidChange 。在macOS 10.14和Swift 4.2中测试
NSTextFieldDelegate
controlTextDidChange
import Cocoa class ViewController: NSViewController, NSTextFieldDelegate { @IBOutlet weak var textField: NSTextField! override func viewDidLoad() { super.viewDidLoad() textField.delegate = self } func controlTextDidChange(_ obj: Notification) { let textField = obj.object as! NSTextField print(textField.stringValue) } }