如何解决使用 ReturnKey 重命名时更改 NSTextField 的背景颜色
当我按下 Enter 键时,文本字段进入编辑模式并开始像 Xcode
一样重命名文件。
这里我想将背景颜色更改为白色。目前,我正在更改 controlTextDidBeginEditing(_ obj: Notification)
中的背景颜色,它会在文本字段收到文本更改后调用。
但是,我正在寻找一种方法,可以在按下 Enter 键后立即更改背景颜色。
这是我当前的代码:
private class TextField: NSTextField,NSTextFieldDelegate {
init() {
super.init(frame: .zero)
delegate = self
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
public func controlTextDidBeginEditing(_ obj: Notification) {
let textField = obj.object as! NSTextField
textField.backgroundColor = NSColor.textBackgroundColor
}
public func controlTextDidEndEditing(_ obj: Notification) {
let textField = obj.object as! NSTextField
textField.backgroundColor = NSColor.clear
}
}
谢谢。
解决方法
如果我理解正确,您想在文本成为 firstResponder 时更改颜色(即当用户单击 textField 时)?如果是这样,我认为您应该使用 textShouldBeginEditing - func textShouldBeginEditing(_ textObject: NSText) -> Bool
和相应的 func control(_ control: NSControl,textShouldBeginEditing fieldEditor: NSText) -> Bool
函数。
如果我没有理解并且您的实际意思是在用户单击弹出的键盘中的“输入”按钮后更改背景颜色 - 您希望在 textField 完成后更改颜色为 firstResponder。
在这种情况下,您应该使用 textShouldEndEditing
或 textDidEndEditing
委托方法及其相应的控制方法
textShouldEndEditing
textDidEndEditing
看起来要覆盖的方法是 selectText(_ sender: Any?)
,当 NSTextField
成为FirstResponder 时立即调用,因为默认情况下选择了文本。
override func selectText(_ sender: Any?) {
let textField = sender as! NSTextField
textField.backgroundColor = NSColor.textBackgroundColor
super.selectText(sender)
}
public func controlTextDidEndEditing(_ obj: Notification) {
let textField = obj.object as! NSTextField
textField.backgroundColor = NSColor.clear
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。