2

我确实使用对象来设置具有自定义字体和颜色的占位符setPlaceholderAttributedString:NSTextFieldCell这是整个代码...

_statusMessageField = [[NSTextField alloc] initWithFrame:NSZeroRect];
[_statusMessageField setBordered:NO];
[_statusMessageField setBezeled:NO];
[_statusMessageField setFocusRingType:NSFocusRingTypeNone];
[_statusMessageField setDrawsBackground:NO];
[_statusMessageField setTextColor:TM_NS_COLOR(35, 37, 46)];
[_statusMessageField setFont:[NSFont systemFontOfSize:13.0]];

NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"What's up?"];
NSRange range = NSMakeRange( 0, [placeholder length] );
[placeholder addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:13.0] range:range];
[placeholder addAttribute:NSForegroundColorAttributeName value:TM_NS_COLORA( 92, 97, 114, 0.7 ) range:range];
[placeholder fixAttributesInRange:range];
[_statusMessageField.cell setPlaceholderAttributedString:placeholder];
_statusMessageField.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_statusMessageField];

...这让我发疯,因为...

  • 占位符仅在NSTextField没有焦点时可见,
  • 当我单击时NSTextField,插入符号可见,尚未输入任何内容,但占位符消失,这是错误的,应该可见,直到输入至少一个字符,

...当我替换setPlaceholderAttributedString:为(无归属)时,占位符的行为正确 - 在没有焦点或有焦点且尚未输入任何内容setPlaceholderString:时可见。NSTextField

知道有什么问题吗?

这是图像http://d.pr/i/WoC9的链接,您可以在其中看到差异。

4

1 回答 1

0

我认为您需要选中 NSTextField 状态下的“拒绝第一响应者”框。

这将解决问题。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    [_statusMessageField setBordered:NO];
    [_statusMessageField setBezeled:NO];
    [_statusMessageField setFocusRingType:NSFocusRingTypeNone];
    [_statusMessageField setDrawsBackground:NO];
    [_statusMessageField setTextColor:[NSColor blueColor]];
    [_statusMessageField setFont:[NSFont systemFontOfSize:13.0]];

    NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"What's up?"];
    NSRange range = NSMakeRange( 0, [placeholder length] );
    [placeholder addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:13.0] range:range];
    [placeholder addAttribute:NSForegroundColorAttributeName value:[NSColor greenColor] range:range];
    [placeholder fixAttributesInRange:range];
    [_statusMessageField.cell setPlaceholderAttributedString:placeholder];
    _statusMessageField.translatesAutoresizingMaskIntoConstraints = NO;
    [_statusMessageField setRefusesFirstResponder:NO];


}

- (void)awakeFromNib {

    [_statusMessageField setRefusesFirstResponder:YES];
}

问候,尼拉姆

于 2013-03-05T11:27:09.597 回答