gpt4 book ai didi

objective-c - 可编辑的透明 NSTextField 文本以白色高亮显示

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:41 24 4
gpt4 key购买 nike

我正在尝试在半透明窗口中创建可编辑的透明 NSTextField:

enter image description here

我注意到,只要该字段可编辑,就会绘制一个白色的“类似选择”的背景,即使该元素实际上并未被选中。

其他可观察到的症状:

  • 当字段设置为不可编辑时,不会出现此突出显示。
  • 如果有多个字段,只有第一个突出显示。
  • 如果文本不是以编程方式设置的,则不会出现突出显示

以下代码用于生成字段:

f = [[NSTextField alloc] initWithFrame:b2];
f.backgroundColor = [NSColor clearColor];
f.drawsBackground = YES;
f.bordered = NO;
f.bezeled = NO;
f.focusRingType = NSFocusRingTypeNone;
f.textColor = [NSColor whiteColor];
f.editable = YES;
f.selectable = YES;
f.backgroundColor = [NSColor clearColor];
f.allowsEditingTextAttributes = YES;
f.stringValue = @"Foo";

[self.contentView addSubview:f];

额外的观察(可能是一个单独的问题):

  • 当字段不是屏幕上的第一个字段并且初始文本以编程方式设置并通过编辑字段删除时,会出现文本阴影:

enter image description here

我似乎找不到任何关于此的文档我想知道你们中是否有人遇到过这种情况并且可能有解决方案或指向我可能没有偶然发现的文档的指针。

最佳答案

第 1 部分:去除高亮

这里有两个选项,具体取决于您要寻找的行为

选项 1 - 无第一响应者

not first responder

  • TextField 不是第一响应者
  • 没有突出显示的文字
  • 文本末尾没有光标

假设您使用的是 NSWindow,在调用 makeKeyAndOrderFront 后将第一响应者设置为 nil

    [self.window makeKeyAndOrderFront:self];
[self.window makeFirstResponder:nil];

看起来好像 makeKeyAndOrderToFront: 在窗口中寻找第一个愿意接受第一响应者的 NSResponder。然后在该响应者上调用 becomeFirstResponder;导致选项 2

选项 2 - 覆盖 becomeFirstResponder

make first responder

  • TextField 是第一响应者
  • 没有突出显示的文字
  • 光标出现在文本的尾部

子类 NSTextfield 并覆盖它的 becomeFirstResponder 方法

@implementation BPTextField

- (BOOL)becomeFirstResponder {
BOOL isResponder = [super becomeFirstResponder];

//Get Field editor, set selected range
NSText* fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange(fieldEditor.string.length ,0)];

return isResponder;
}

@end

从可用性的角度来看,我更喜欢这个选项

第 2 部分:去除阴影

选项 1 - 添加纯色背景

我不清楚; ) 为什么会这样,但如果您添加纯色背景,文本将更新。

选项 2 - 覆盖 textDidChange

在您的文本字段中覆盖 textDidChange:notification

@implementation BPTextField

- (void)textDidChange:(NSNotification *)notification {
[super textDidChange:notification];
[self setNeedsDisplay:YES];
}

@end

最后的笔记

您会注意到文本看起来很糟糕或死板。向文本字段或父 View 的层添加背景颜色将解决此问题。

关于objective-c - 可编辑的透明 NSTextField 文本以白色高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com