问题标签 [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.

0 投票
1 回答
436 浏览

objective-c - NSOutlineView 和 NSCell (NSTextFieldCell) 上的自定义选择

你好世界各地的开发人员:) 今天我有一个关于 NSOutlineView 自定义的问题,环境是:-OS X 10.7+ - 一个带有子类 NSTextFieldCell 的大纲视图

问题:我想为单元格选择自定义颜色结束渐变,我的第一种方法是覆盖该方法

在 NSTextFieldCell 子类中,但结果是这样的:

在此处输入图像描述

渐变选择仍然保持蓝色,标签背景变为返回的颜色。如何更改整个单元格选择颜色(使用渐变?)


更新:

在继承 NSOutlineView 并覆盖该方法后:

现在我有正确的行为,但没有渐变,如何添加渐变(或背景图像到单元格?)

0 投票
2 回答
334 浏览

objective-c - NStableColumn 和 Cocoa 绑定中的自定义 NSCell?

我目前正在尝试使用 Cocoa Bindings 来使用 Cocoa Bindings 填充 NSTableView。我在使用自定义 NSCell 子类的某些列中遇到了一个主要问题。

我的 XIB 文件包含一个 NStableView 和一个 NSArrayController。

在接口 Builder 中,当您将 NSTextFieldCell 或 NSImageCell 设置为列的数据单元时,您可以将单元格的“值”属性绑定到 ArrayController。当您将 NSCell 设置为 NSTableColumn 的数据单元时,Interface Builder 中没有可用的“值”绑定。所以你可以推断出绑定应该以编程方式完成。

当您尝试以编程方式将“value”属性绑定到 NSArrayController 的“arrangedObjects.property”时,会出现错误提示:“此类不符合键值编码的键值”。实际上,当您调用exposeBindings: 方法时,没有公开“值”属性,也没有“值”属性。

您如何优雅地将 NSArrayController 绑定到具有自定义子类 NSCell 的 NSTableColumn ?

0 投票
1 回答
1284 浏览

objective-c - NSSliderCell:绘制自定义旋钮的子类

我需要继承 NSSliderCell 来自定义它的外观。我对酒吧没有任何问题,我超越了

它按预期工作。

也可以,但我想要一个更小的旋钮,并且调整 NSRect 的大小不是一个选项,因为我在右侧或左侧(或两者都有,如果我将自定义旋钮居中)有一个不需要的空间。

阅读文档,我应该重写

计算应该在其中绘制旋钮的矩形,然后调用 drawKnob:问题是,试图让 cellSize 计算我应该在哪里绘制旋钮,我得到一个荒谬的宽度:40000

我怎样才能得到正确的宽度?NSSliderCell 是 NSCell 的子类,因此我无法访问框架/边界。

0 投票
1 回答
383 浏览

cocoa - 如何模拟 NSRadioButton 上的切换?

在 OS X 中,我有一个带有一行 NSButtonCells 的 NSTableView。这些需要看起来完全像 NSRadioButton 类型的按钮,但更像是 NSSwitchButton。特别是,如果状态是 NSOnState 并且我用鼠标单击它,我需要将其状态切换为关闭(是的,我知道这不是单选按钮的标准行为,但这是我需要做的。)如果我使用NSSwitchButton 类型的纽扣电池,其行为正是我所需要的;也就是说,tableView 调用我的 setObjectValueForTableColumn:row: 被调用,我可以在其中适当地修改我的数据模型。但是,当我将类型更改为 NSRadioButton 时,当单元格状态为 On 并单击它时,该方法或我能找到的任何其他委托方法都不会被调用。关于最简单的方法的任何想法?

0 投票
1 回答
162 浏览

objective-c - 好奇 NSButtonCell 状态

我有一个带有 NSTableColumn 的 NSTableView,里面有一个 NSButtonCell(一个复选框),每次添加一行时都会生成一个新的 NSButtonCell 实例,我在 IB 中配置了它。但是,我很好奇为什么在下面的代码块中第二个 NSLog 返回 0。

它返回 0 的事实意味着我正在向 NSButtonCell 的实例发送消息,对吗?那么为什么 setState: 不改变第二个 NSLog 的返回值呢?

0 投票
2 回答
225 浏览

objective-c - 在 NSCell 中翻转 NSImage

为什么 NSImage 绘制在 NSTableView 的 NSCell 中翻转。以及如何正确解决该行为。我从数据源方法返回图像:

作为解决方法,我尝试了:

一切都很好,但正如文档所说,它已弃用方法

osx 10.7-10.9

0 投票
1 回答
187 浏览

objective-c - Objective-C:正确处理子类 NSControl 和 NSActionCell 之间的共享属性?

我一直不确定的一件事是如何正确处理自定义NSControl子类和NSCell子类之间的通信。在我对 Cocoa 的介绍中,我看到它多次提到父控件如何提供许多与子单元格/单元格实现相同的方法、访问器和修改器。例如,NSControl类和类在它们的头文件中NSCell都有-isEnabled和:-setEnabled:

NSControl.h

NSCell.h

了解NSControl该类为. 我更感兴趣的是:它们是如何实现的?或者更好的是,应该如何实现他/她自己的子类的共享属性?显然,只有 Apple 的工程师才真正知道他们的框架内部发生了什么,但我想也许有人可以阐明以一种非常干净的方式模仿 Apple 的覆盖方法方法的最佳方法。NSCell

我在解释东西方面很糟糕,所以我将提供一个例子来说明我在说什么。假设我已经NSControl像这样子类化了:

BSDToggleSwitch.h

我已经分类了NSActionCell

BSDToggleSwitchCell.h

如您所见,它们都共享一个名为sharedProp.

我的问题是:有效保持控件和单元格之间的共享属性同步的标准方法是什么?这似乎是一个主观问题,我想是的,但我想认为大多数时候都有“最好的方法”来做到这一点。

过去我使用过各种不同的方法,但我想缩小我处理它的方式,并且只使用能够以最低开销提供最佳数据完整性的技术。我应该使用绑定吗?实现调用其对应方匹配方法的自定义变异器怎么样?KVO?我是一个失败的原因吗?

以下是我过去做过的一些事情(其中一些或全部可能完全古怪或直接错误):

  1. Cocoa Bindings - 我只是将控件的属性绑定到单元格的属性(反之亦然):

    这似乎是一个很好的方法,但是您将绑定到/从哪个对象?我已经阅读了所有的 KVO/KVC/Bindings 文档,但是当属性在任何一种情况下都应该相同时,我从来没有真正意识到绑定方向性的重要性。有一般规律吗?

  2. 从 Mutators 发送消息- 我会从控件的 mutator 向单元格发送消息:

    然后我会在单元的实现中做同样的事情:

    这似乎也相当合理,但似乎也更容易出错。如果一个对象在没有值检查的情况下向另一个对象发送消息,那么很容易发生无限循环,对吧?在上面的示例中,我为此添加了检查,但我确信有更好的方法。

  3. 观察和报告——我会观察每个对象实现中的属性变化:

    再一次,这似乎是可行的,但我不喜欢if为每个共享属性写一个语句。根据观察,我也发送了通知,但由于控制单元关系是尽可能“一对一”的(甜蜜的双关语),这看起来很愚蠢。

同样,我知道这有点主观,但我真的很感激一些指导。我学习 Cocoa/Objective-C 已经有一段时间了,这从一开始就困扰着我。了解其他人如何处理控件和单元格之间的属性同步真的可以帮助我!

谢谢!

0 投票
1 回答
545 浏览

cocoa - NSTableHeaderCell 检测鼠标按下?

我正在尝试自定义 aNSTableHeaderCell以检测鼠标点击。在过去,我使用过诸如NSTrackingArea或覆盖mouseDown事件之类的东西,例如:

这些方法似乎不能在 a 上正常工作,NSTableHeaderCell因为它是一个单元格而不是一个视图。

有人对检测单元格上的鼠标事件有任何建议吗?具体来说,我想捕捉第一次点击(连同它的位置)。

0 投票
2 回答
327 浏览

nstableview - 在基于单元格的 NSTableView 中检测单元格编辑的开始

我在NSTableView.

我通过双击它进入一个单元格。我在窗口上有其他按钮。每当我单击一个按钮时,这都会终止单元格编辑,因为我在单元格中什么都没有,并且 NSTableView 不会刷新,即使我调用[myTableView reloadData].

一种可能的解决方法是在我开始编辑单元格后立即禁用所有按钮,NSTableView但我不知道如何检测到这一点。

只要输入以下内容,我就可以捕获内容:

但这不是我想要的,只是太晚了,因为它只有在用户输入单元格编辑器后才会被调用。

我想准确检测单元格编辑何时开始,即使尚未输入任何内容。

我看过一些可能有结果的帖子:

最好先让窗口成为​​ firstResponder (从而使 firstReponder 远离焦点区域),如果失败,则求助于 NSWindow 上粗略的“endEditingFor:”方法。

但这对我来说只是希腊语。任何帮助深表感谢。

0 投票
1 回答
328 浏览

objective-c - 在表格视图单元格中使用修饰键进行鼠标跟踪

我在基于单元格的 NSTableView 的列中有一个 NSTextFieldCell。这个单元格应该处理点击。当没有按下修饰键时,这可以正常工作。如果我按住 shift 或 command 键,表格视图会吞下 mouseDown 事件以尝试处理行选择。

有没有办法完全禁用 NSTableView 中的行选择?

有没有办法让 NSTableView 通过所有事件?

我的单元格子类派生自 TableViewLinks 示例代码中的 LinkTextFieldCell。它实现:

由于我不想要行选择,我的表视图委托实现:

我的委托方法是从 -[NSTableView mouseDown:] 调用的。当没有按下修饰键时调用鼠标跟踪代码。

有没有比继承 NSTableView 来覆盖 -[NSTableView mouseDown:] 更好的方法来解决这个问题?