gpt4 book ai didi

cocoa - NSOutlineView源列表样式,基于 View ,更改字体

转载 作者:行者123 更新时间:2023-12-03 16:10:54 24 4
gpt4 key购买 nike

我使用带有源列表样式的 NSOutlineView,并使用基于 View (而不是基于单元格)的大纲 View 。

我希望能够将某些行加粗。但是,我尝试更改字体(在 IB 中手动更改,通过 viewForTableColumn:… 中的代码,或通过 Font Bold 绑定(bind))到目前为止都被忽略了。

来自this message ,这似乎是因为 NSOutlineView 的源列表样式接管了文本字段的外观管理:

I'm guessing that you've hooked up your text field to the textField outlet of the NSTableCellView? If so, I think you might be running into NSTableView's automatic management of appearance for source lists.

Try disconnecting the text field from the textField outlet and see if your custom font sticks.

如果我断开 textField 导出,外观就会在我的控制之下,并且我的胆量会起作用。

但是,现在我无法让它看起来像自动的。我的意思是,当 NSOutlineView 管理文本字段的外观时,字体为粗体,并在选择任何项目时获得阴影,但当我手动管理它时,情况并非如此。

任何人都可以回答以下任一问题:

  1. 当 NSOutlineView 管理文本字段的外观时,如何使 Font Bold 绑定(bind)起作用
  2. 如果我没有 NSOutlineView 管理文本字段的外观,我怎样才能让它的外观和行为就像我有它管理的情况一样?

最佳答案

我想我找到了解决方案:

NSTableCellView管理其 textField 的外观通过设置 backgroundStyle 来导出所包含控件的单元格上的属性。将其设置为 NSBackgroundStyleDark触发 NSTextFieldCell 中的特殊路径这本质上设置了 attributedStringValue ,通过 NSShadowAttributeName 更改文本颜色并添加阴影.

你可以做两件事:

  • 设置backgroundStyle您自己在自定义行或单元格 View 子类中。
  • 使用自定义 NSTextFieldCell在单元格的文本字段中更改行为/绘图。

我们选择了后者,因为我们需要不同的主题(不同颜色)表格 View 的外观。我们为此找到的最方便(尽管肯定不是最有效)的位置是覆盖 - drawInteriorWithFrame:inView:并在调用 super 之前修改单元格的属性字符串,然后恢复原始字符串:

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSAttributedString *originalString = self.attributedStringValue;

// Customize string as you like
if (/* whatever */)
[self setAttributedStringValue: /* some string */];

// Regular drawing
[super drawInteriorWithFrame:cellFrame inView:controlView];

// Reset string
if (self.attributedStringValue != originalString)
self.attributedStringValue = originalString;
}

希望这可以帮助其他遇到类似情况的人。

关于cocoa - NSOutlineView源列表样式,基于 View ,更改字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13491041/

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