NSButtonCell vs NSButton



我一直在阅读苹果关于NSButtons和cells的文档,似乎真的不明白两者之间的区别。更为复杂的是,它们似乎都有setTitle:等方法的大量重叠,我不确定应该使用哪种方法。

有人能解释一下基本区别是什么吗?

谢谢,
Teja

您可以将控件视为单元格的代表或"代理"1控件是NSView,在这种情况下意味着两件重要的事情。首先,它表示要绘制的窗口区域。其次,它接受用户交互2

不过,控件本身并没有太大作用。细胞是完成所有工作的东西——例如,请注意,细胞可以将自己绘制到给定的框架中。这是视图的责任,但控件将其推迟到单元格,只是提供一个绘图区域。

同样,当用户单击控件时,控件会接收事件并弄清楚它的含义,但响应事件执行操作的工作会传递给单元格。

如果您查看各种控件/单元格对的文档(NSButtonNSButtonCell就是其中一对),您会看到提到"cover"方法。这意味着控件具有与其对应单元格同名的方法,这些方法只需调用单元格的。这就是你提到的重复的来源。当你想使用其中一个方法时,在控件上调用它——作为这对方法的公共面,它很可能只是简单地询问单元格。

苹果提供的关于交互的最佳描述是"控件和单元格编程主题"指南中的"控件和单元如何交互"。


1在某种意义上说,一个演员有一个经纪人来促成演出
2这不是所有视图的严格情况;它实际上是CCD_ 5的一个特性,CCD_

摘自OS X的Cocoa编程:The Big Nerd Ranch Guide

"单元格处理控件的实现细节。对于在大多数情况下,单元格的属性和方法由相应控件中的相同属性和方法。对于例如,当您更改标签的标题时,标签的单元格为执行工作,但是您与标签的字符串值交互所有物

可可中的细胞有着悠久的历史。它们最初添加以解决性能问题:控制权交给了牢房,牢房可以做得更多比对照有效。

Mac电脑的功能要强大得多与当时相比,细胞已经成为一种负担。苹果公司表示,它正在弃用手机,但您仍然可以在文档大纲和旧代码中看到它们。"

NSButtonCellNSActionCell的一个子类,用于实现按钮、开关和单选按钮的用户界面。它还可以用于视图的任何其他区域,该区域旨在在单击时向目标发送消息。NSControlNSButton子类使用单个NSButtonCell。要创建开关组或单选按钮,请使用一个NSMatrix,其中包含一组NSButtonCell s。

NSButton Cell为绘图和行为提供了更多可裁剪的选项。从它们继承的类中可以更好地看出差异(NSButtonCell继承自ActionCell类,而NSButton继承自NSControl类

更好地查看文档:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButton_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/Reference/Reference.html

您应该根据您希望按钮的绘制方式和行为进行选择。如果您想要一个简单的按钮,请使用NSButton。

最新更新