我目前遇到的问题类似于此SO question中描述的问题(目前尚未接受答案),因为我的文字字段是'除非选择了文本字段,否则占位符文本不可见。
我已经将NSTextField
(下面的代码)子类化了:
@interface CustomTextField : NSTextField
@property (nonatomic, strong) IBInspectable NSImage *backgroundImage;
@end
@implementation CustomTextField
- (void)awakeFromNib
{
[self setDrawsBackground:NO];
}
- (void)drawRect:(NSRect)rect
{
NSImage *backgroundImage = self.backgroundImage;
[super drawRect:rect];
[self lockFocus];
[backgroundImage drawInRect:rect fromRect:rect operation:NSCompositeSourceOver fraction:1.0];
[self unlockFocus];
}
@end
我已将Interface Builder中的文本字段的类设置为CustomTextField
,并设置占位符文本,如下所示:
从下面的屏幕截图中可以看出,占位符文本仅在选择了文本字段时才可见...
文字字段一:
文字字段二:
是否有人知道如何使占位符文本可见,无论用户是否选择了它?谢谢!
答案 0 :(得分:2)
在超类绘制其内容后,您正在绘制背景图像。所以,你可能正在绘制超类绘制的任何东西,取而代之。
在调用super之前,你应该首先绘制你的背景图像。此外,您不应该在-drawRect:
中锁定焦点(或将其解锁)。框架已经为你完成了。
当文本字段具有焦点时,占位符显示的原因是您实际上看到的是字段编辑器,而不是此时的文本字段。字段编辑器是NSTextView
(“视图”,而不是“字段”)的实例,它插入到文本字段顶部的视图层次结构中以处理文本编辑任务。因此,当文本字段具有焦点时,您的自定义类将其绘制为无关紧要。