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)重新绘制整个边框还是有点过火了。