2016-01-09 37 views
3

我目前正在使用Swift编写OS X应用程序。我想要做的是当用户在NSTextField中输入文本时,我想运行一个函数来检查该值并将其添加到标签。我将如何迅速做到这一点?如何生活检查NSTextField - Swift OS X

回答

5
  1. 符合ViewController到协议NSTextDelegate
  2. 分配ViewController作为代表TextField
  3. 执行controlTextDidChange方法。

    import Cocoa 
    
    @NSApplicationMain 
    class AppDelegate: NSObject, NSApplicationDelegate, NSTextFieldDelegate { 
    
        @IBOutlet weak var window: NSWindow! 
        @IBOutlet weak var textField: NSTextField! 
        @IBOutlet weak var label: NSTextField! 
    
    
        func applicationDidFinishLaunching(aNotification: NSNotification) 
        { 
         textField.delegate = self 
        } 
    
        override func controlTextDidChange(notification: NSNotification) 
        { 
         let object = notification.object as! NSTextField 
         self.label.stringValue = object.stringValue 
        } 
    
        func applicationWillTerminate(aNotification: NSNotification) { 
         // Insert code here to tear down your application 
        } 
    } 
    

在视图控制器:

import Cocoa 

class ViewController: NSViewController, NSTextDelegate { 

    @IBOutlet weak var label: NSTextField! 
    @IBOutlet weak var label2: NSTextField! 
    @IBOutlet weak var textField: NSTextField! 
    @IBOutlet weak var textField2: NSTextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func controlTextDidChange(notification: NSNotification) { 
     if let txtFld = notification.object as? NSTextField { 
     switch txtFld.tag { 
     case 201: 
      self.label.stringValue = txtFld.stringValue 
     case 202: 
      self.label2.stringValue = txtFld.stringValue 
     default: 
      break 
     } 
     } 
    } 
} 
+0

感谢您的代码。稍后再试。我如何检测被编辑的标签(我可能在一个点上有2个) – iProgram

+0

使用标签,可以识别特定的控件。代码值在Interface Builder中设置 – madmir

+0

代码需要从NSTextFieldDelegate继承,而不是NSTextDelegate。您还需要将文本字段委托设置为self。 – iProgram

-3

您可以使用NSNotificationCenter来观察您的文本字段。

@IBOutlet weak var textField: UITextField! 

在viewDidLoad中()

let noti = NSNotificationCenter.defaultCenter()  
noti.addObserver(self, selector: "textDidChange:", name: UITextFieldTextDidChangeNotification, object: textField) 

,然后定义一个函数,如:

func textDidChange(noti: NSNotification) { 
    print(textField.text) 
} 

现在你在文本字段中输入的每个梯形,它将在textDidChange打印出来()函数。

希望这有助于

+0

该代码是针对iOS不是OS X.我在'UITextFieldTextDidChangeNotification'得到一个错误,我试图与'UITextFieldTextDidChangeNotification来取代它'但它仍然不起作用。错误是'未解决的标识符' – iProgram