gpt4 book ai didi

cocoa - NSTableView(基于 View )具有自定义文本颜色和正确的编辑文本颜色

转载 作者:行者123 更新时间:2023-12-03 17:09:02 25 4
gpt4 key购买 nike

更改基于 NSTableView 的 View 中的文本颜色可以通过使用自定义表格单元格 View 并实现 setBackgroundStyle 来完成:

- (void)setBackgroundStyle: (NSBackgroundStyle)backgroundStyle {
[super setBackgroundStyle: backgroundStyle];

UICoverageElement *element = self.objectValue;

if (backgroundStyle == NSBackgroundStyleEmphasized) {
self.textField.textColor = NSColor.highlightColor;
} else {
if ([element.value isEqualToString: @"<no name>"]) {
self.textField.textColor = NSColor.tertiaryLabelColor;
} else if ([element.value hasPrefix: @"UI"]) {
self.textField.textColor = typeColor;
} else if ([element.value hasPrefix: @"["] || [element.value hasPrefix: @"{"]) {
self.textField.textColor = objectColor;
} else {
self.textField.textColor = NSColor.textColor;
}
}
}

这工作得很好:

enter image description here

但在编辑单元格时会造成麻烦。在这种情况下,字段编辑器显然采用当前手动设置的文本颜色(所选行为白色)并在具有白色背景的字段编辑器中显示:

enter image description here

现在的问题是:在编辑单元格 View 时如何设置正确的文本颜色?

编辑开始时不会调用

setBackgroundStyle,这使得无法在此函数中修复该问题。我尝试了各种指示编辑过程开始的方法,但没有调用任何方法(但为独立文本字段调用)。当我不设置highlightColor时,编辑器颜色是正确的,但所选行的突出显示颜色是错误的。

最佳答案

老实说,这是您认为非常简单明了的事情之一,但不幸的是事实并非如此。

影响字段编辑器中颜色的唯一方法是:

a) 在调用 NSCell 的 selectWithFrame:... 方法之前将文本字段的颜色设置为所需的颜色b) 调用 selectWithFrame:... 后更改放入字段编辑器中的文本的颜色。

一般来说:

a) 子类化 NSTextFieldCell 并在设置字段编辑器之前将字段的文本颜色设置回通常的默认值。

- (void)selectWithFrame:(NSRect)rect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)delegate start:(NSInteger)selStart length:(NSInteger)selLength
{
self.textColorWhenNotEditing = self.textColor;
self.textColor = NSColor.controlTextColor;
[super selectWithFrame:rect inView:controlView editor:textObj delegate:delegate start:selStart length:selLength];
}

- (void)endEditing:(NSText *)textObj
{
[super endEditing:textObj];
self.textColor = self.textColorWhenNotEditing;
}

b) 直接更改字段编辑器

- (void)selectWithFrame:(NSRect)rect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)delegate start:(NSInteger)selStart length:(NSInteger)selLength
{
[super selectWithFrame:rect inView:controlView editor:textObj delegate:delegate start:selStart length:selLength];

NSMutableDictionary * attribs = [((NSTextView *)textObj).typingAttributes mutableCopy];
attribs[NSForegroundColorAttributeName] = NSColor.controlTextColor;

[((NSTextView *)textObj).textStorage setAttributes:attribs range:NSMakeRange(0, textObj.string.length)];
((NSTextView *)textObj).typingAttributes = attribs;
}

关于cocoa - NSTableView(基于 View )具有自定义文本颜色和正确的编辑文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54867222/

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