swift - 如何制作带有左或右指示符的 NSTextfield 以进行验证?

标签 swift macos cocoa

我需要制作一个带有如下指示器的自定义 NSTextField:

/image/LAhfA.png

在右侧,您可以看到一个指示器图标。

我需要什么代码来做这个?

谢谢大家。

编辑

文本永远不能与图标重叠。图标不是一直显示的,但是在书写的时候可以显示,而且文字正确的时候,这个文字也必须占据图标的位置。

最佳答案

文本字段控件是一个 View ,其中绘图全部由 NSTextFieldCell 完成。您需要做的是子类化 NSTextFieldCell,并自定义绘图。查看 NSCell 的 API,您会发现有一个 drawWithFrame:inView: 方法,它负责为整个字段绘制所有内容。在这个过程中使用了NSCell的各种其他方法。

不幸的是,有些绘图的完成方式有点私密,不容易摆弄,但主要是 drawWithFrame:inView: 将绘制背景,然后调用 drawInteriorWithFrame:inView : 绘制文本。在我脑海中,我不记得 NSTextFieldCell 是否使用 titleRectForBounds: 来确定文本的边界是什么,但我很确定它是。因此,您可以覆盖它以返回一个更窄的矩形,从而留出空间来使用单元格本身绘制验证图标,或使用 subview 。

此外,您需要调整 NSTextView 字段编辑器绘制和编辑文本的范围,否则当您查看字段时它不是第一响应者它看起来很好,但是当您编辑字段的文本时它将与图标重叠。为此,您可能需要调整提供给 editWithFrame:inView:editor:delegate:event: 的框架。

调整文本字段总是有点挑剔,因为找到所有涉及的方法和代码路径需要一段时间,但这就是您需要做的事情的要点。

关于swift - 如何制作带有左或右指示符的 NSTextfield 以进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885111/

相关文章:

arrays - 数组索引超出范围。 swift 。表格 View

swift - 尝试在 Swift 中实现 ?.let 模式,有可能吗?

macos - 如果我是 JetBrains Toolbox 用户,如何关联 IntelliJ IDEA 在 "LightEdit"模式下打开的 Mac Finder 中的文件类型?

macos - ImageMagick/GhostScript - dyld : Library not loaded:/usr/local/lib/libjbig2dec. 0.dylib

macos - 有没有基于cocoa的数据可视化库?

ios - Swift UIActivityViewController Image&Url Share 不适用于 FB

Swift 常量 : Struct or Enum

swift - 关闭弹出窗口的正确方法是什么?

Cocoa:创建可拖动区域

iphone - 找出哪些编译选项用于构建 SQLite 的方法