Macos 编辑时更改NSTextField边框和BG颜色

Macos 编辑时更改NSTextField边框和BG颜色,macos,swift,cocoa,nstextfield,Macos,Swift,Cocoa,Nstextfield,我有一个NSTextField,它在显示时不使用边框和窗口背景色,但我希望它在编辑时更改为默认边框和白色背景色。我知道我可以通过以下方式更改这些属性: nameTextField.bezeled = true nameTextField.backgroundColor = NSColor.textBackgroundColor() 我不知道的是,当文本字段开始编辑和结束时,如何得到通知。似乎没有对此采取任何行动。有没有其他方法可以实现这种行为 编辑: 实际上,当将操作设置为“结束编辑时发送”时

我有一个
NSTextField
,它在显示时不使用边框和窗口背景色,但我希望它在编辑时更改为默认边框和白色背景色。我知道我可以通过以下方式更改这些属性:

nameTextField.bezeled = true
nameTextField.backgroundColor = NSColor.textBackgroundColor()
我不知道的是,当文本字段开始编辑和结束时,如何得到通知。似乎没有对此采取任何行动。有没有其他方法可以实现这种行为

编辑:
实际上,当将操作设置为“结束编辑时发送”时,可以通过文本字段的更改操作检测编辑结束,因此这就解决了,但如何检测开始编辑?

您可以设置
NSTextField的
委托

nameTextField.delegate = self
然后可以设置不同的状态:

func control(control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
    nameTextField.bezeled = true
    nameTextField.backgroundColor = NSColor.textBackgroundColor()

    return true
}
func control(control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
    nameTextField.bezeled = false
    nameTextField.backgroundColor = NSColor.windowBackgroundColor()

    return true
}

编辑:


我认为您可以将
NSTextField
子类化,并覆盖
成为第一响应者
辞职第一响应者
,然后您就知道
NSTextField
是否有焦点了。

好的,谢谢,但问题是只有在文本实际发生更改时才会调用它们。您还可以查看
窗口的
第一响应程序是否是
NSTextField
重写firstReponder方法使其工作,谢谢您的帮助!但是我注意到,
nameTextField.bezeled=true/false
在重写方法中使用时实际上不起作用(在委托方法中也不起作用)。它不会变为有边界,只是没有边界,因为我在IB中设置了它。这篇文章可能对你有用:谢谢链接!不过,为了这个简单的目的,必须用贝塞尔(bezier)重新绘制整个边框还是有点过火了。