2016-01-09 4 views
3

В настоящее время я делаю приложение OS X, написанное в Swift. То, что я хочу сделать, - это когда пользователь вводит текст в 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 
        } 
    } 
    

в ViewController:

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. Вам также необходимо настроить делегаты текстовых полей на себя. – 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 но это все еще не работает. Ошибка: 'unresolved identifier' – iProgram

Смежные вопросы