问题标签 [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 投票
3 回答
2628 浏览

cocoa - Cocoa:如何使用可编辑的文本区域实现自定义 NSView?

制作具有可编辑文本区域的自定义 NSView 所需的最低实现是什么?我假设 NSTextFieldCell 可以用于此。我已经成功地在视图中绘制了单元格(这很简单),但是使其可编辑似乎需要在视图和单元格之间进行更复杂的协调。在某处有可用的示例代码吗?

更新。我应该明确表示我的长期目标是在同一个视图上拥有更多可编辑的文本区域。AFAIU 在这种情况下最好使用单元格,因为它们比完整的视图更轻量级。我更新的问题是:使用适当的 NSCell 制作具有可编辑文本区域的自定义 NSView 所需的最低实现是什么?

0 投票
3 回答
3343 浏览

cocoa - 使用 NSButtonCell 实例获取自定义 NSCell 以处理鼠标单击/鼠标事件

好吧,我真的被这个难住了。我想制作一个将 NSTextFieldCell 组合在一起的复选框。如果鼠标点击框而不是文本,则复选框打开很重要。我或多或少地完成了这一点,但问题是接收鼠标事件,因为我连续单击一个复选框,但它们都转向 NSOnState。我将展示我所做的事情以及我的各种失败尝试,以使其发挥作用。

所以这就是我到目前为止的做法:

标题:

执行:

我知道我可能不应该这样做:

在那里...因为结果是每个复选框都进入 NSOnState。这是因为细胞被重复使用了吗?为什么 ImageAndTextCell 可以在同一个 tableview 中有不同的图像?如何处理鼠标事件?

我努力了:

trackMouse: ... DOES 被调用

startTrackingAt:..., continueTracking:..., 和 stopTracking:.... 当我点击复选框“命中区域”时不要被调用

在 trackMouse:... 我试过了

并且似乎都没有导致复选框处理鼠标事件。

如何让单个复选框进入 NSOnState?我知道我已经很接近了,但是经过大量的文档阅读和谷歌搜索后,我并没有成功解决这个问题。

欢迎提出建议和意见。。


好的,这里有更多显示对象的创建和销毁..

0 投票
1 回答
3682 浏览

objective-c - 如何通过 KVC 设置 NSComboBox 的值?

我在 Interface Builder 中创建了几个 NSComboBoxes,一个以编程方式创建。

在 Interface Builder 中创建的 NSComboBoxes 是完美的。我将他们的值绑定到共享用户默认控制器,当他们的视图打开时,他们正以正确的值坐在那里。重要的是,这个值在 NSComboBox 中显示为“普通”文本。换句话说,该值未显示为选中状态。这就是我要的。

对于以编程方式创建的 NSComboBox,我使用 selectItemAtIndex:0 设置值。当我这样做时,选择了正确的项目——但文本似乎被选中。即,它突出显示和一切。我不想要这个。以下是我尝试过的解决方法:

(i) 获取字段编辑器并将插入点设置到文本的末尾。这不起作用,但奇怪的是,字段编辑器的字符串在执行此操作时为 nil 或为空。我不确定这是否是字段编辑器的正确行为。

(ii) 尝试其他各种设置组合框值的方法,例如 setObjectValue、takeStringValueFrom 等。

(iii) 最后,也是最令人沮丧的是,我尝试使用 [myComboBox setValue:@"The Default Item" forKey:@"value"] 设置 NSComboBox 的值;objc_exception_throw 失败,大概是因为没有这样的 KVC 密钥。但我知道组合框的值可以通过 KVO 设置,因为它可以在界面生成器中使用!我猜我不知道正确的关键路径。我尝试使用自省枚举所有属性,但我无法让代码正常工作(objc_property_t 不在预期的标头中)。

所以,我有两个问题:

首先,有谁知道如何以编程方式为 NSComboBox 设置默认值,以便不选择框中的文本?我将不遗余力地做到这一点,包括一个新的 NSComboBoxCell 子类,如果涉及到的话。

其次,有人能告诉我 IB 使用什么键或键路径来设置 NSComboBox 的值吗?或者,为什么我这样做的努力失败了?

我已经为此工作了好几个小时,我真的很沮丧!


谢谢,必须注册!很高兴能解决这个问题。一点后续:

(i) 文本的选择肯定是由焦点引起的。调用 setRefusesFirstResponder:YES 可以解决问题。不幸的是,窗口真的想专注于这个组合框,因为将 rejectsFirstResponder 设置回 NO(稍后,在窗口启动之后)会导致再次选择文本(如果他愿意,我确实希望用户能够专注于这个框)。因此,就我而言,最终的解决方案是调用 [window makeFirstResponder:otherControl]。奇怪的是,虽然 [window makeFirstResponder:nil] 不起作用。任何想法为什么?

(ii) 感谢您指出绑定和属性之间的区别。我在研究这个问题时学到了很多东西。一方面,我了解到您可以通过调用 - (NSArray *)exposedBindings 来获取绑定列表,它对于 NSComboBox 返回 (fontSize, alignment, toolTip, fontName, enabled, contentValues, fontFamilyName, font, hidden, fontItalic, textColor, value , 内容, 可编辑, fontBold)。其次,我能够使用 [myComboBox bind:@"value" toObject:[NSMutableString stringWithString:@"defaultValue"] withKeyPath:@"string" options:nil] 设置值,其中 NSMutableString 上有一个类别,它变成“字符串”到一个属性。最后,这实际上并不能解决文本选择“问题”。

所以我剩下的唯一问题可能是为什么 [window makeFirstResponder:nil] 不能将焦点从组合框上移开。不是超级重要,但如果有人有想法,我会很好奇。

0 投票
1 回答
257 浏览

objective-c - NSTableView - 在长表视图中以编程方式显示值

好的,所以我正在为客户创建一个 iTunes 覆盖。我的问题是,对于给定的索引,我如何能够以编程方式将显示的单元格/单元格连续移动到表格视图中的特定条目。

换句话说,当您在播放列表中复制 iTunes 时,如果表视图(严格来说是播放列表)中有足够的条目来保证这种跳转,它会在其表视图中跳转到下一首歌曲!

0 投票
2 回答
250 浏览

objective-c - NSCell 是 setEnabled:NO 但仍可访问以进行编辑等

我有一个自定义控件,其中包含一些 (NSTextField *) NSCell。我曾尝试在单元级别禁用所有单元的使用,但遍历所有单元的循环似乎什么也没做。

[myCell setEnabled:NO];

编译并运行...

单元格仍然是可点击和可编辑的。

我的最终目标当然是在运行时只禁用一些......但我什至不能在安装过​​程中禁用所有这些。

0 投票
1 回答
913 浏览

objective-c - 以编程方式将自定义对象数组传递给 NSMatrix 中的 NSCell

我有一个NSArray习惯NSObjects。每个对象都有一些属性和我想在网格视图中显示的图像。NSMatrix 似乎是解决我的问题的好方法,但我在获取要显示的对象内容时遇到问题。

有几点需要注意。

  1. 我没有使用核心数据
  2. 我正在尝试以编程方式执行此操作
  3. 我考虑过使用NSCollectionView,但NSMatrix在这种情况下似乎是更好的解决方案
  4. 所有单元格都遵循相同的显示格式 - 即我不想传递不同的单元格不同类型的对象,只是传递对象的不同实例

假设我NSView在一个窗口中有一个 (matrixContainerView)。控制器文件有一个IBOutletto matrixContainerView。在我的控制器中,我的 awakeFromNib 中有以下内容:

MyCustomCell头如下所示:

并且实现文件如下(图简化):

在控制器中包含对象的数组的一些初始化和填充之后MyModel,我想填充NSMatrix对象的实例。

我该怎么做呢?

我尝试从数组中添加两个对象,如下所示(仅作为测试):

但这只是创建了第一个对象图像。如果上述方法有效,那么枚举数组并添加对象将是一项简单的任务。

如何添加单元格并将适当的对象传递给这些单元格以便它们可以正确显示?

就编程指南而言,至少可以说 NSMatrix 上的Apple 文档很少。那里的信息对我非常有用,但只有在我添加了对象并让它们显示之后!

更新

如果我不添加这两个对象(根据我上面的示例),输出没有什么不同,即我的自定义单元格的单个表示被绘制到屏幕上。这告诉我,我看到的单一表示是在矩阵初始化时完成的,实际上我没有在第 0 列第 0 行绘制任何东西,而实际上我认为我是。这让我现在更加困惑。

0 投票
1 回答
660 浏览

cocoa - 如何在 NSTableView 中的 NSTextFieldCell 前面显示 NSImage

我显示一个文件列表,并希望在 NSTableColumn 中显示文件图标和可编辑文件名。

另外,在文件名后面立即显示附加 NSImage 的最佳方法是什么(我的意思是不在右侧为第二个图标添加附加列)。

0 投票
1 回答
661 浏览

cocoa - NSTableView NSCell 中的链接

在过去的几天里,我一直在阅读并尝试在自定义绘制的 NSCell 中允许链接,但基本上没有任何可用的东西,每种方法总是存在问题。

有谁知道这样做的有效方法?

我使用 - (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlViewm 自定义绘制 NSCell

NSCell 只是一个可变高度的文本块,里面有链接,有些单元格有链接,有些没有。

我试过使用 nsattributedstring 和 NSLinkAttributeName

我尝试拦截对单元格的所有点击,然后尝试将他们单击的位置与文本中链接的位置进行匹配,但这永远不会奏效。

我基本上已经尝试了所有可以在所有板上找到的建议,但大多数评论都是旧的,所以我希望有人想出了一个好方法来做到这一点。

谢谢,大卫

0 投票
1 回答
481 浏览

objective-c - 通过 [NSTableColumn dataCellForRow] 检索 NSCell 数据时出现问题

我正在尝试从一个通过检索特定NSCell数据,但每次它为同一行和同一列显示不同的值。数据源始终保持不变。The绑定到一个.Please,如果有人可以建议一个更好的方法来正确地做到这一点。而且我不想实现那些委托方法。如果您需要更多信息,请告诉我。NSTableView[NSTableColumn dataCellForRow]NSTableViewNSArrayController

问候

0 投票
1 回答
1247 浏览

objective-c - NSTableView 中的 Cocoa 自定义单元格:NSCell 子类化泄漏

我创建了一个 NSCell 的子类并重写了 setObjectValue 函数来实现我的需要。除了存在泄漏问题外,一切都很好。NSCell 的 setObjectValue 函数似乎不会释放其原始对象。

我给类的对象是一个自定义对象,它符合 NSCopying 协议并实现了 copyWithZone 函数,如下所示

.

我在这里发现了同样的问题。没有答案,但可能更好地描述我的情况。