2016-01-09 71 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