我需要制作一个带有如下指示器的自定义 NSTextField:
在右侧,您可以看到一个指示器图标。
我需要什么代码来做这个?
谢谢大家。
编辑
文本永远不能与图标重叠。图标不是一直显示的,但是在书写的时候可以显示,而且文字正确的时候,这个文字也必须占据图标的位置。
最佳答案
文本字段控件是一个 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/