如何在OS X上的文本字段上使用DidEndEditing(swift)

时间:2015-11-22 14:22:48

标签: swift macos nstextfield

我想在这里实现的是在我按下返回键之后,如果文本字段的文本与单词January匹配,则打印正确,如果没有,则打印错误。

但是当我按下返回键时,没有打印出来。

有人可以写一个关于如何使用DidEndEditing的示例代码吗?

@IBOutlet weak var wordTextfield: NSTextField!
let monthEN = "January"

func textFieldDidEndEditing(wordTextfield: NSTextField) {
    if wordTextfield.stringValue == monthE{
        print("right")
    }else{

        print("wrong")
    }
}

2 个答案:

答案 0 :(得分:1)

os x中的textFieldDelegate在Swift 4中的工作方式如下:

class MainViewController: NSViewController, NSTextFieldDelegate {

      @IBOutlet weak var textFileViewLabel: NSTextField!

      override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self
     }



     override func controlTextDidChange(_ obj: Notification) {
         //Here check the changes of textField input
     }

    override func controlTextDidEndEditing(_ obj: Notification) {
        //Here check the changes of textField input

    }
}

答案 1 :(得分:0)

据推测,你来自iOS背景,而你刚刚进入OS X.我没有太多的OS X开发经验,但似乎textFieldDidEndEditing(_:)不属于NSTextFieldDelegate协议。

NSTextFieldDelegate只是NSControlTextEditingDelegate的扩展,并且不添加任何方法。

考虑到这一点,看起来我们可能需要在OS X或潜在control(_:textFieldShouldEndEditing:)上实现类似行为的control(_:isValidObject:)。但无论哪种方式,重要的是要注意NSTextField永远不会调用textFieldDidEndEditing(_:) - 这完全来自iOS。

有关详细信息,建议您查看the Apple documentation for NSControlTextEditingDelegate

还值得一提的是确保您确实设置了文本字段的delegate属性。