尝试在新的(非常小的)Swift Mac应用中为几个文本字段设置验证。在SO和其他一些例子中关注其他各种主题,我仍然无法将controlTextDidChange传播(传播到我的ViewController)。
例如:How to live check a NSTextField - Swift OS X
我已经阅读了至少十几种基本相同概念的变体。由于所接受的答案似乎都没有起作用,我只是越来越感到困惑,这在大多数平台上通常都是一项相当简单的任务。
我实现了controlTextDidChange,只需调用NSLog就可以告诉我是否有任何内容。
AppDelegate应该是响应者链的一部分,最终应该处理controlTextDidChange,但我也没有看到任何内容。
使用当前的Xcode我开始一个新项目。 Cocoa app,Swift,Storyboard等等。
从我可以收集的内容中,以下孤立的示例应该可行。在我的实际应用程序中,我尝试了一些将ViewController插入响应程序链的方法。我发现的一些答案表明它并不总是存在。我还尝试手动添加ViewController作为代码中的委托theTextField.delegate = self
我所做的一切似乎都没有改变文字以触发任何事件。
为什么我在设立这个代表团时遇到这么多麻烦?
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSTextFieldDelegate, NSTextDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
func controlTextDidChange(notification: NSNotification) {
let object = notification.object as! NSTextField
NSLog("AppDelegate::controlTextDidChange")
NSLog("field contains: \(object.stringValue)")
}
}
import Cocoa
class ViewController: NSViewController, NSTextFieldDelegate, NSTextDelegate {
@IBOutlet var theTextField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
func controlTextDidChange(notification: NSNotification) {
let object = notification.object as! NSTextField
NSLog("ViewController::controlTextDidChange")
NSLog("field contains: \(object.stringValue)")
}
}
答案 0 :(得分:1)
我认为您关注的示例有点过时了。 尝试...
override func controlTextDidChange(_ notification: Notification) {
...作为NSTextFieldDelegate
中方法的功能定义。