【问题标题】:NSTextView placeholder text only visible when selectedNSTextView 占位符文本仅在选中时可见
【发布时间】:2015-09-26 14:44:55
【问题描述】:

我目前遇到了类似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,并设置占位符文本如下所示:

从下面的屏幕截图中可以看出,占位符文本仅在选择文本字段时可见...

文本字段一:

文本字段二:

无论用户是否选择了占位符文本,是否有人知道如何使占位符文本可见?谢谢!

【问题讨论】:

    标签: objective-c macos cocoa interface-builder nstextfield


    【解决方案1】:

    在超类绘制其内容之后,您正在绘制背景图像。因此,您可能正在绘制超类绘制的任何内容,并替换它。

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

    当您的文本字段获得焦点时显示占位符的原因是您实际上看到的是字段编辑器,而不是此时的文本字段。字段编辑器是NSTextView(“视图”,而不是“字段”)的一个实例,它被插入到文本字段顶部的视图层次结构中以处理文本编辑任务。因此,当文本字段具有焦点时,您的自定义类绘制它就无关紧要了。

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 2017-03-02
      • 2020-03-20
      • 2018-10-28
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多