问题标签 [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 回答
891 浏览

nstableview - 更改 NSCell 的背景而不更改 NSTableColumn 中的所有单元格

我正在尝试更改基于单元格的特定单元格的背景NSTableView。但是,当我尝试仅更改一个单元格的背景颜色时,它会影响整个列。有没有办法分离单元格和列之间必须存在的任何绑定?

这是我正在使用的代码(带有解释我认为正在发生的事情的注释):

0 投票
2 回答
1150 浏览

objective-c - 如何始终从过滤的 NSTableView 中获取选定的单元格值?

语境

我有一个 2 列、基于单元格的 NSTableView,由 NSArrayController 管理。

  • 第一列填充有复选框以指示该值是否已启用。
  • 第二列代表元素的名称。

该视图链接到 NSSearchField,因此根据将搜索字符串与第 2 列中的字符串进行比较的谓词进行过滤。

更改搜索字符串时,视图正确显示并按预期过滤。

要求

我只需要允许用户最多启用 5 行。为了实现这一点,我正在监视支持数组的更改并跟踪启用条目的数量。如果计数超过 5,则我会通过警报通知用户并通过获取选定的行索引然后在后备数组中禁用该索引来取消选择先前启用的条目。我在 [willChange.. ..didChange] KVO 块中执行此操作。

这在视图未排序时按预期工作,但显然会导致问题,因为所选行不再对应于数组中的适当索引。

因此,如果视图被过滤(搜索字符串不为空),我使用以下代码获取所选单元格的字符串值。然后我遍历数组并禁用匹配字符串的条目。

问题

尽管选定的行总是准确的,但从代表单元格中获取值却不是。看起来最初返回的值是正确的,但是即使选择的索引仍然正确,选择其他行也会从下一行返回数据。我还观察到它从视图中的几行返回值。

更新

在进一步测试之后,第一次应用过滤器似乎可以工作,但是通过不同的字符串过滤会保留第一个选定单元格的单元格值以应对特定的不稳定。

IE:

  1. 加载窗口并选择 6 个项目
  2. 取消选择第 6 项并警告用户
  3. 应用过滤器
  4. 选择新的第 6 项
  5. 取消选择第 6 项并警告用户
  6. 在同一过滤器中选择不同的第 6 项
  7. 取消选择第 6 项并警告用户
  8. 输入新过滤器
  9. 选择新的第 6 项
  10. 取消选择第 6 项并警告用户
  11. 从同一过滤器中选择新的第 6 项
  12. 所选索引正确,但所选行的值与之前的选择相同
  13. 用户反复警告,因为没有取消选择正确的条目,导致 6 个永久选中的条目。

但是,仍然存在返回以下行值而不是先前选择的项目的情况。

问题

我的问题是:

  1. 我是否以正确的方式为过滤列表获取选定的行?
  2. 即使列表已排序,如何根据所选行一致地检索第 2 列的字符串值?

感谢您的时间。

解决方案

我通过更改从以下位置获取单元格的代码解决了这个问题:

至:

0 投票
1 回答
1320 浏览

cocoa - 如何更改 NSSegmentedControl 的高度

我正在尝试增加 NSSegmentedControl 的高度,超过 25 像素的“常规”控件大小。我对 NSSegmentedCell 进行了子类化,我知道我有 2 种方法可以使用。

如果我在 IB 中放置分段控件,则在我的 NSSegmentedCell 子类中覆盖上述方法。作为例外,传入的框架和视图基于 IB 中分段控件的高度。所以,我不知道从这里去哪里。

我是否也必须继承 NSSegmentedControl 并在所需高度绘制我自己的控件?然后使用 NSSegmentedCell 子类来处理段?

0 投票
0 回答
83 浏览

cocoa - NSCell KVO 监控突出显示

我想监视按钮单元格突出显示的状态,但是回调永远不会被调用,尽管突出显示发生了变化

监控keyPath“状态”有效,但为什么没有突出显示监控?

0 投票
2 回答
994 浏览

objective-c - NSCell vs NSView:当需要很多控件时

我知道 Apple 不赞成使用NSCellNSView请参阅 AppKit 10.10 发行说明)。以前建议NSCell在需要许多控件时出于性能原因使用。

我花了相当多的时间来实现一个需要许多子视图的自定义控件,并且使用 NSView 类型的子视图的性能并不好。请参阅相关的 stackoverflow 讨论 就一个窗口中可以拥有的 NSView 类型实例的数量而言,实际限制是什么?我正在努力处理 1000-2000 个内存对象(这似乎并不多)。这种限制的真正原因是什么?

上面让我感到困惑的一件事是基于视图的 Cocoa NSTableViews。您可以创建超过 1000-2000 个单元格的 tableViews,而且它们似乎没有很差的加载和滚动性能?如果每个单元格都是一个 NSView 那么这是如何实现的呢?

如果有实际限制,那么当 Apple 说他们不赞成使用 NSCell 时,他们在想什么?我确信他们知道某些控件需要大量的子视图。

此外,(可能已过时)Apple Developer Guide 对 NSView 和 NSCell 之间的区别给出了以下解释,我需要进一步解释:

“因为单元格比控件轻,就继承的数据和行为而言,使用多单元格控件而不是多个控件更有效。”

继承的数据:如果正在使用数据,这肯定只会导致“膨胀”=>并且只会在您需要时使用它?

继承的行为:您不在类/对象中使用的方法肯定不会造成任何开销?

轻量级 NSCell 与重量级 NSView 之间的真正区别是什么,除了它似乎被传统地接受? (我真的很想知道。)

0 投票
1 回答
318 浏览

swift - 在 Swift 中从 NSTextField 获取 NSImage

我曾经从 Obj-C 检索 NSTextField 子类中的 NSImage,如下所示:

当我尝试在 Swift 中做同样的事情时,我似乎无法转换attachmentCell但得到一个编译器错误:

0 投票
2 回答
340 浏览

objective-c - 在 NSTableView 文本单元格中创建和响应超链接

我有一个程序,它的 NSTableView 填充了要上传的文件。发送文件后,带有文件名的文本单元格将获得一个超链接放入其中(数组数据被赋予具有 NSLinkAttributeName 属性的 NSMutableString)。如何允许用户单击此链接以在其默认浏览器中打开网页?

0 投票
1 回答
252 浏览

objective-c - Swift 1.2 为什么我不能继承任何 NSCell 的子类?

为什么我不能子类化 NSCell 的任何子类?我想子类化MyButtonCell,即CustomButtonCell: NSButtonCell. 意义

总是给我以下错误:

重现我的问题的简单步骤:

  1. 打开终端

  2. 类型:(swift如果你有最新的 Xcode 6.3.1)

  3. 当你拿到时,

    Welcome to Swift version 1.2. Type :help for assistance.

键入以下内容:

  1. 你会得到这些错误:

declaration has a different @objc name from the declaration it overrides ('initTextCell:' vs. 'initWithTextCell:')__lldb_expr_9.Foo:3:24: note: overridden declaration is here @objc @objc override init(textCell aString: String) ^ declaration has a different @objc name from the declaration it overrides ('initImageCell:' vs. 'initWithImageCell:')__lldb_expr_9.Foo:4:24: note: overridden declaration is here @objc @objc override init(imageCell image: NSImage?) ^

为什么?有没有办法解决这个问题?

仅供参考:Swift 1.1 没有这个问题!

0 投票
1 回答
323 浏览

macos - NSCell 子类化:绘制 NSProgressIndicator?

我正在使用基于单元格的 NSTableView。有什么方法可以创建自定义NSCell子类并在其中绘制 NSProgressIndicator 吗?

类似于:

NSProgressIndicator本身仅用作状态指示,不用户交互(不需要鼠标点击等)。

我想坚持使用基于单元格的 NSTableView,因为我使用的是 NSTableViewDataSource。NSLevelIndicatorCell是另一种选择,但我更喜欢外观/设计NSProgressIndicator

0 投票
1 回答
1058 浏览

macos - 在 OS X 10.10 中,我可以在没有 NSCell 的情况下实现 NSControl 吗?

我正在学习NSControl. 我知道它NSCell已经开始在 OS X 10.10 Yosemite 中弃用,所以我宁愿不使用即将消失的 API。此外,NSControlClass Reference 显示所有单元格访问器已被弃用。

我明白这一切,但不清楚的是,对于NSControl在 10.10 上编写子类的人推荐的课程是什么。有关该主题的所有 Apple 指南均未提及弃用NSCell. 我想我可以用旧的方式做事,但是当 Apple 将弃用NSCell升级到下一个级别时,我需要更改我的代码。

甚至可以在NSControl不使用NSCell的情况下实现子类吗?

任何人都可以提供建议或将我链接到有关此主题的资源吗?事实证明这很难用谷歌搜索。