Swift NSTextField 文本消失

2024-04-06

这个问题可能存在于 Objective-c 的一篇 6 年前的帖子中。我还没有找到最近有效的答案或问题,或者是用 Swift 编写的答案或问题。

我正在使用故事板并且我已经子类化NSTextField。由于某种原因,当我单击该字段时,占位符会显示,当我输入文本并单击时,文本会消失。文本实际上在那里,因为当我单击返回时,输入的文本仍然存在。图层覆盖文本值似乎是某种类型的渲染问题?很奇怪。我在用着NSTrackingArea并且还添加CALayer.

Here's a screenshot of what happens: enter image description here

这是我的代码:

class NowTextField: NSTextField {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // required nonsense
        let textFieldLayer = CALayer()
        let textFieldRect = NSRect(x: 0, y: 0, width: 120, height: 32)
        let textFieldTrackingArea = NSTrackingArea.init(rect: textFieldRect, options: [NSTrackingAreaOptions.activeInActiveApp, NSTrackingAreaOptions.mouseEnteredAndExited], owner: self, userInfo: nil)
        self.wantsLayer = true
        self.layer = textFieldLayer
        self.addTrackingArea(textFieldTrackingArea)

        // styling
        self.textColor = NSColor.darkGray
        self.layer?.cornerRadius = 4
        self.layer?.backgroundColor = NSColor.white.cgColor
        self.layer?.borderColor = NSColor.lightGray.cgColor
        self.layer?.borderWidth = 2
        self.drawsBackground = false
    }

    override func mouseEntered(with event: NSEvent) {
        self.textColor = NSColor.darkGray
        self.layer?.cornerRadius = 4
        self.layer?.backgroundColor = NSColor.white.cgColor
        self.layer?.borderColor = NSColor.highlightBlue.cgColor
        self.layer?.borderWidth = 2
        self.drawsBackground = false
    }

    override func mouseExited(with event: NSEvent) {
        self.textColor = NSColor.darkGray
        self.layer?.cornerRadius = 4
        self.layer?.backgroundColor = NSColor.white.cgColor
        self.layer?.borderColor = NSColor.lightGray.cgColor
        self.layer?.borderWidth = 2
        self.drawsBackground = false
    }
}

我找到了答案。我删掉了let textFieldLayer = CALayer()self.layer = textFieldLayer因为这些似乎在文本字段的顶部添加了不必要的层。这是我的工作版本的完整代码:

class NowTextField: NSTextField {

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)

    // required nonsense
    let textFieldRect = NSRect(x: 0, y: 0, width: 120, height: 32)
    let textFieldTrackingArea = NSTrackingArea.init(rect: textFieldRect, options: [NSTrackingAreaOptions.activeInActiveApp, NSTrackingAreaOptions.mouseEnteredAndExited], owner: self, userInfo: nil)
    self.wantsLayer = true
    self.addTrackingArea(textFieldTrackingArea)

    // styling
    self.textColor = NSColor.darkGray
    self.layer?.cornerRadius = 4
    self.layer?.backgroundColor = NSColor.white.cgColor
    self.layer?.borderColor = NSColor.lightGray.cgColor
    self.layer?.borderWidth = 2
    self.drawsBackground = false
}

override func mouseEntered(with event: NSEvent) {
    self.textColor = NSColor.darkGray
    self.layer?.cornerRadius = 4
    self.layer?.backgroundColor = NSColor.white.cgColor
    self.layer?.borderColor = NSColor.highlightBlue.cgColor
    self.layer?.borderWidth = 2
    self.drawsBackground = false
}

override func mouseExited(with event: NSEvent) {
    self.textColor = NSColor.darkGray
    self.layer?.cornerRadius = 4
    self.layer?.backgroundColor = NSColor.white.cgColor
    self.layer?.borderColor = NSColor.lightGray.cgColor
    self.layer?.borderWidth = 2
    self.drawsBackground = false
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift NSTextField 文本消失 的相关文章

随机推荐

  • 在 Visual Studio Code 中设置 Cobol 制表符/缩进

    我刚刚在 Mac 上安装了 Visual Studio Code 让我发疯的是我无法设置制表符 缩进以匹配我喜欢的第 7 8 12 16 20 24 和 72 列的 Cobol 格式 我已经看到如何将制表符设置为 4 个空格 但这使我缩进到
  • Elm 中的序列 Http.get

    下面我有一个button尝试加载远程内容 import Post exposing Post import Html exposing import Html Events exposing import Http import Json
  • 如何使用 queryExecute 设置调试输出查询名称

    我想知道是否有办法使用 queryExecute 设置调试输出查询名称
  • 在敏捷/Scrum 用户故事中,多少细节才足够? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 通常的反应是足够详细就足够了 在我们目前正在忙的项目中 该项目不完整并且在没有任何类型的 brs 文档 用户故事的情况下移交给我们 我们得
  • 在 JFileChooser 中仅打开 .xml 文件

    我正在开发一个java应用程序 我只需要 xml文件 现在我只想显示 xml文件在JFileChooser每当用户想要保存文件或打开现有文件时 这个可以只显示吗 xml files 您可以使用 JFileChooser API 来完成您的任
  • C++ 类中'typedef' 会自动继承吗?

    我曾经认为 typedef 不会自动继承 但下面的代码快照暗示了一些不同的东西 include
  • 以编程方式禁用三星上的应用程序省电模式

    我是消息应用程序的开发人员 我的应用程序被置于自动省电模式 这会阻止消息通过 当我进入三星手机上的 应用程序省电 选项 设置 gt 电池 gt 应用程序省电 选项 时 我可以看到该选项对于某些应用程序 例如 WhatsApp 和 Faceb
  • 从 QRunnable 发出信号

    我正在尝试从一个发送信号QRunnable到我的主要QObject 但由于某种原因它没有收到它们 这是正确的方法吗 这是一个小测试用例 import sys from PyQt4 QtGui import QApplication from
  • Django:搜索短语中各个单词的首字母?

    我有一个名为的 Django 模型Author 有一个名为name 它不分为姓氏 名字 class Author models Model name models CharField max length 200 unique True 例
  • 根据条件分割数据框

    我正在尝试将我的数据框分成两个基于medical plan id 如果为空 则进入df1 如果不空入df2 df1 df with medicalplanid df with medicalplanid medical plan id df
  • R quantmod:getFinancials

    我正在尝试导入在纽约证券交易所上市的所有公司的财务报表 这些公司的市值大于样本的第一个四分位 这是我的代码 require TTR require quantmod data init 2013 01 01 start date lt as
  • 是否可以将类的静态对象存储在共享首选项中?

    我正在开发一个项目 我正在创建一个静态class s object 所以当我switch off device at that time all the static objects are cleared所以我想存储到shared pre
  • Python:如何在 40 秒内更新 Google BigQuery 中的值?

    我有一张桌子在Google BigQuery我使用 Python 访问和修改pandas功能read gbq and to gbq 问题是追加 100 000 行大约需要 150 秒 而追加 1 行大约需要 40 秒 我想更新表中的值而不是
  • 获取组驱动器中当前 Word 文档的 OneDrive 项目 ID

    我正在研究一个Office js Word插件但文档存储在组驱动器上 我怎样才能获得其中一个或全部group id drive id and item id对于当前文档 相关问题is here https stackoverflow com
  • 如何返回不同的值及其计数?

    我想做的 希望 很简单 但我只是不太掌握正确的语法 我想返回表中的所有不同值 并计算每个值的记录数 所以 在 PHP 中 我有 result mysql query SELECT DISTINCT tagName FROM tagTable
  • KivyMD 顶部应用栏

    我正在尝试学习 Kivy 和 KivyMD 因为我想制作一个 Android 应用程序 但我陷入了第一个障碍 我想要一个工具栏 或者按照 KivyMD 文档的说法 TopAppBar 我正在尝试按照文档实现它 但出现错误Unknown Cl
  • JSON自动添加反斜杠

    我正在尝试使用 Gson 将 java 对象转换为 json 但是当我尝试打印它时 我得到了这个 JSON 用户 电子邮件 电子邮件受保护 cdn cgi l email protection 姓氏 Las 姓名 amy 密码 qwe123
  • 是否可以将时间戳添加为 firestore 数据库中的文档字段?

    在与云Firestore https firebase google com docs firestore 我在将数据添加到 Cloud Firestore https firebase google com docs firestore
  • 有没有办法使用基于范围的 for 循环迭代最多 N 个元素?

    有没有一种好的方法可以使用基于范围的容器来迭代容器中的最多 N 个元素for标准库中的循环和 或算法 这就是重点 我知道我可以使用 旧 for带条件循环 基本上 我正在寻找与此 Python 代码相对应的内容 for i in arr N
  • Swift NSTextField 文本消失

    这个问题可能存在于 Objective c 的一篇 6 年前的帖子中 我还没有找到最近有效的答案或问题 或者是用 Swift 编写的答案或问题 我正在使用故事板并且我已经子类化NSTextField 由于某种原因 当我单击该字段时 占位符会