问题标签 [nscell]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 核心动画导致部分源列表焦点环
我ImageAndTextCell
在自定义NSOutlineView
. 对于那些不熟悉它的人,它是一个NSTextFieldCell
在单元格文本左侧绘制图像的子类。
我有一个像 iTunes 一样的源列表,其中包含组行和下面的项目。在编辑单元格的值时,焦点环仅绘制组的前两行的一部分(见下文)。聚焦环的顶部三分之一位于第一行,底部三分之一位于第二行。
随后的行画得很好(见下面的第三行),它们都有相同的图像。这可能是什么原因造成的?(请参阅下面的更新 3。核心动画导致此行为)
更新 1
我几乎注释掉了所有自定义代码ImageAndTextCell
,它没有任何区别(只有init
、dealloc
、copyWithZone
和image
getter 和 setter 仍然存在)。
更新 2
我几乎注释了NSOutlineView
子类和我的委托类中的所有代码,以及将更新 1 中的所有代码注释掉 - 仍然是奇怪的结果。第三行不再总是完美的,但是当我删除各种功能时,绘制的焦点矩形部分发生了变化。
此外,我遇到问题的项目在我的两个大纲组中的第二个。在重命名第一组中唯一的项目时,焦点矩形在每一步都很完美。具有讽刺意味的是,这是在我的应用程序的标准操作期间无法重命名的。
接下来,我将查看我在 NIB 中的所有设置,看看那里是否有问题。
更新 3
我可以通过对窗口中的每个视图全面禁用核心动画来修复它。现在的问题变成了:如何重新启用 Core Animation 而不会让我的焦点矩形看起来很糟糕?
objective-c - 如何使用子视图设置带有自定义单元格的 NSTableView
我正在尝试使用ArrayController和Bindings设置带有自定义单元格的NSTableView。为此,我向自定义单元格添加了一个子视图。数据连接似乎有点工作。虽然,似乎有一个我无法解决的重绘问题。当我加载应用程序时,只渲染了一些单元格。当我滚动浏览行或选择一个时,渲染会发生变化。
我在 github 上创建了一个示例项目来说明问题所在。
可以在此处找到单元格渲染的实际源代码:
似乎父母controlView
没有重绘。我可以以某种方式强迫它吗?
objective-c - NSCell 中的 NSView
我已经阅读了很多关于此的内容,但我无法让它工作,我有一个带有此代码的自定义 NSCell
这是我的 NSTableView 数据源:
据我了解,drawwithframe ...在初始化单元格时被调用,但它从未被调用,那么,我错过了什么?
objective-c - 具有多行的 NSTextFieldCell
我需要显示一个 NSTextFieldCell ,每行具有不同格式的多行。
像这样的东西:
第 1 行:标题
第 2 行:描述
我将 NSTextFieldCell 子类化,但我不知道如何继续。
有任何想法吗?
cocoa - NSSliderCell 和 NSButtonCell 不会改变值
我有一个带有 NSTableColumn 的 NSTableView,其值绑定到 NSArrayController 的值。我正在使用委托来提供哪些行具有哪些单元格类型。当在 .nib 文件中,列的单元格是 NSTextFieldCell 时,NSSliderCell 和 NSButtonCell 复选框不会更改值(因为我可以单击复选框并移动滑块,但是当我释放鼠标时,值会恢复)。当我将单元格类型(在 nib 文件中)更改为 NSActionCell 时,NSButtonCell 和 NSSliderCell 工作正常,但我无法编辑 NSTextFieldCell。当我使用- [NSTableView editColumn:row:withEvent:select:]
强制编辑单元格,当我提交值时它恢复为原始值,就像 NSSliderCell 和 NSButtonCell 一样。我尝试将 NSTableColumn 子类化并覆盖 dataCellForRow: 方法,这产生了相同的结果。当我断开 NSTableColumn 上的所有绑定时,会出现相同的结果(当然,除了单元格都是空白的)。
你们对如何解决这个问题有任何想法吗?
谢谢。
objective-c - NSCell 上的 NSAttributedString
我正在用我使用 NSAttributedString 格式化的数据填充 NSOutlineView。到目前为止,我已经格式化了文本字体、大小和颜色。我的问题是选择行时前景色不会改变。如果您创建一个Nstextfieldcell并将颜色设置为接口构建器上的禁用ControltextColor,则可以正常工作:当未选择选择时,它是灰色的,当我选择白色时,当我编程将此颜色设置为属性字符串定义时,它总是显示为始终显示为灰色的。
提前致谢。
objective-c - NSCell 带分区
我想知道是否有像下面的示例那样绘制 NSCell 的方法。这个想法是适合同一列,3 行,第一个有足够的空间放置标题,其余的有 2 列。
TITLE_ _ __ _ _ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ DATA_TITLE_1
:DATA_VALUE_1 _ _ _ DATA_TITLE_2:DATA_VALUE_2 DATA_TITLE_3
:DATA__VALUE_1 DATA_TITLE_4:DATA_VALUE_2
笔记:
- “_ _ _”应该是三个空格(我不知道如何表示它们)。
- 请记住,列标题和值的长度会有所不同。
提前致谢。
objective-c - NSCell 上的动画
我正在尝试为我的 NSOutlineView 中的一些单元格设置动画。我需要在左侧面板上为设备旁边的 iTunes 同步图标设置动画图标。
我在动画领域并没有真正的经验,我通过查看整个互联网找到了这个简单的解决方案:
我在使用此解决方案时遇到的问题是 NSCell 的不同子类都没有我可以使用的 CALayer。所以起初我决定子类 NSCell 添加一个包含 CALayer 的 NSImageView。动画效果很好,但是体验很糟糕,图像视图非常低效,我几乎无法滚动,并且动画只能在其中一行中运行。
我现在要做的是子类 NSButtonCell(我需要为单元格设置一个操作,否则它会是一个 NSImageCell),覆盖 drawWithFrame 方法并将 subLayer 添加到接收到的 NSView(controlView)和然后动画它。
现在的问题是动画不起作用。
我把代码留给你。
请帮助!
提前致谢。
米基万。
cocoa - 如何创建一个 NSTextFieldCell,在编辑模式下显示自定义视图而不是 NSTextField?
我有一个 tableView,有 3 列包含 NSTextFieldCell。一切都充满了绑定。
其中一列的单元格的文本是计算出来的,不能直接编辑。对于本专栏,我希望当单元格进入编辑模式时,显示一个按钮或自定义视图,而不是 textField。
换句话说,我想要一个NSCell ,它在不被编辑时是一个NSTextFieldCell ,而在被编辑时是一个NSButtonCell(或自定义视图)。
有什么提示可以继续这个吗?
这是我尝试过的,但没有成功:
- 尝试#1:
我将 a 子类化NSTextFieldCell
并覆盖fieldEditorForView:
如下所示 => 问题是我返回的 NSButton 没有响应setDelegate:
,可能还有许多其他的东西。
- 尝试#2:
子类NSTextFieldCell
和覆盖drawWithFrame: inView:
=> 此方法仅用于在不处于编辑模式时绘制单元格。
- 尝试#3:
这条线索有一些潜力,但我显然在这里遗漏了一些东西。在我的窗口委托中
实现,并返回一个自定义字段编辑器。windowWillReturnFieldEditor: toObject:
我似乎在正确的轨道上,但我错过了一些东西。参数 anObject 从来都不是我的自定义单元格(我仔细检查过,它在 XIB 中正确定义)。
objective-c - 从 NSOutlineView 检索单元格内容
NSOutlineView 出现了一个奇怪的问题。该视图本质上是一个应用程序列表,其中包含关联文件作为子项。我在它的数据源中手动填充视图,所有这些都很好。我现在想要做的是有一个按钮来删除一个项目。为了做到这一点,我实现了一个方法 removeAppOrFile,如下所示:
myView 是一个连接到我的 NSOutlineView 的 IBOutlet。如果我选择不同的行并单击按钮,则 selectedRow 的值将正确更改,但 NSCell 对象永远不会改变,它的值应该是什么(即 NSString 项)总是显示最后一个可见项的值(即,如果有一个以子项作为最后一项的项 NSString 项将是父项,如果它没有展开,或者最后一个子项,如果它被展开)。
奇怪的是,我在其他地方使用基本相同的代码作为 NSOutlineView 上的 doubleAction 并且它运行良好。在这种情况下,代码如下:
在这种情况下,发送者是大纲视图。项目和单元格随 rowNumber 变化而变化。
关于为什么它在第一个示例中不起作用的任何想法?