2011-05-24 27 views
8

我一直在阅读有关NSButtons和单元格的Apple文档,我似乎无法理解两者之间的区别。除了这种复杂性,看起来他们都有像setTitle:等方法的大量重叠,我不知道我应该使用哪些。NSButtonCell vs NSButton

任何人都可以解释基本的区别是什么?

感谢,
Teja公司

回答

8

呦你可以将控制想象成一个单元的代表或“代理”。 该控件是一个NSView,这意味着在这些情况下两个重要的事情。首先,它代表了一个窗口的区域,其次是它接受用户交互。

尽管如此,控制本身并没有太大的作用。细胞就是完成所有工作的东西 - 例如,注意细胞可以将自己吸引到给定的框架中。这是一种观点的责任,但是控制将这种情况推迟到细胞,只是提供一个绘图区域。同样,当用户点击一个控件时,控件接收到该事件并计算出它的含义,但是响应该事件执行一个动作的工作被传递给该单元。

如果你看看各种控制/单元对的文档(NSButtonNSButtonCell就是这样一对),你会看到提及“覆盖”方法。这意味着该控件具有与其对应单元相同名称的方法,该方法只需调用该单元的名称即可。这是你提到的重复的来源。当你想使用这些方法中的一种时,在控制器上调用它 - 作为这一对的公共面孔,它很可能简单地问单元。

在Control and Cell Programming Topics指南中,Apple提供的最佳交互描述是"How Controls and Cells Interact"


在具有谁采购演出代理一个演员的感觉。
这并不完全正确的所有意见;它实际上是的一个功能,从NSView继承。

+0

我看到它和UIView和CALayer是一样的吗? – onmyway133 2016-01-18 15:33:55

-2

NSButton单元具有绘图和行为很多更cutomizable选项。的差异更清楚地看到在他们从(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。

+0

我不知道我跟着你。 “NSButtonCell”不是“NSButton”的一部分吗?我认为分配'NSButton'并调用'[button cell]'返回与它关联的'NSButtonCell'。这就是我所困惑的。 – 2011-05-24 17:03:36

2

摘自Cocoa Programming for OS X: The Big Nerd Ranch Guide

“细胞处理控制的实现细节。对于大多数部分,单元格的属性和方法在相应的控件中被相同的属性和方法“覆盖”。对于 实例,当您更改标签上的标题时,标签的单元格 正在执行该工作,但您将与该标签的stringValue 属性进行交互。

细胞在可可中有很长的历史。它们最初被添加用于解决性能问题 :控制的许多基本任务都被交给了单元,这可以比控制更有效地执行更多 。

Mac电脑比当时更强大 ,电池已成为一种负担。 苹果已经表示,它是在贬低细胞的过程,但 你仍然会看到他们在你的文档大纲,并在旧的代码。”

0

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