繁体   English   中英

NSTextView占位符文本仅在选中时可见

[英]NSTextView placeholder text only visible when selected

我目前遇到的问题类似于此SO问题中所述的问题 (当前尚无公认的答案),除非选择了文本字段,否则我的文本字段的占位符文本不可见。

我有子类化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 ,并设置了占位符文本,如下所示:

在此处输入图片说明

从下面的屏幕快照中可以看到,仅当选择了文本字段时,占位符文本才可见。

文本字段一:

在此处输入图片说明

文本字段二: 在此处输入图片说明

是否有人对我如何使占位符文本可见而不管用户是否选择了它? 谢谢!

您将在超类绘制内容之后绘制背景图像。 因此,您可能正在使用超类绘制的内容进行替换。

大概应该先绘制背景图片,然后再调用super。 另外,您不应在-drawRect:锁定焦点(或解锁焦点)。 框架已经为您做到了。

当您的文本字段具有焦点时显示占位符的原因是,您实际上看到的是字段编辑器,而不是此时的文本字段。 字段编辑器是NSTextView的实例(“视图”,而不是“字段”),已插入到文本字段顶部的视图层次结构中以处理文本编辑职责。 因此,当文本字段具有焦点时,自定义类将其绘制为无关紧要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM