微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ReturnKey 重命名时更改 NSTextField 的背景颜色

如何解决使用 ReturnKey 重命名时更改 NSTextField 的背景颜色

我有一个 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。 在这种情况下,您应该使用 textShouldEndEditingtextDidEndEditing 委托方法及其相应的控制方法 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?