2017-01-12 2 views
1

Я пытался зарегистрировать делегат для NSViewController, как это:NSViewController Делегат

class ViewController: NSViewController , NSTextFieldDelegate{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     textfield.delegate = self 
    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 
    @IBOutlet weak var textfield: NSTextField! 

    func textDidChange(_ notification: Notification) 
    { print ("text did change ") 
    } 
} 

функ textDidChange не вызывается, если текстовое поле изменяет свое содержание.

В раскадровке я сделал следующие соединения:

enter image description here

+0

Вы уверены, что текстовое поле подключено к вашей «текстовой строке»? – Caleb

+0

Думаю, что сделал. Я добавил скриншот выше. – mica

ответ

2

textDidChange не является частью NSTextFieldDelegate, это часть NSTextDelegate, и это, как правило, используется для NSTextView с, не NSTextField с.

NSTextFieldDelegate принимает NSControlTextEditingDelegate, включая controlTextDidChange, что ищем.

override func controlTextDidChange(_ obj: Notification) { 
    print("text did change") 
} 

Обратите внимание, что вы можете установить делегат либо через раскадровки розетку, или с помощью кода, но вы не должны делать оба (я предпочитаю первый, но это абсолютно субъективное, которое превосходит).

+0

thx, работает. Устанавливает ли делегат двойную проблему? – mica

+0

Нет, установка делегата дважды не повредит ничего, это просто не нужно. Худший случай: в какой-то момент в будущем вы решите изменить делегата на что-то еще и не забудьте изменить его в одном из мест, а затем потратить часы, пытаясь понять, почему он не работает правильно. – zpasternack