NSButtonCell против NSButton - PullRequest
8 голосов
/ 24 мая 2011

Я читал документацию Apple о NSButtons и ячейках, и я действительно не могу понять разницу между ними. В дополнение к этой сложности, похоже, что оба они имеют большое перекрытие методов, таких как setTitle: и т. Д., И я не уверен, какие из них мне следует использовать.

Кто-нибудь может объяснить, в чем основные различия?

Спасибо,
Тея

Ответы [ 4 ]

8 голосов
/ 24 мая 2011

Вы можете думать о контроле как о представителе ячейки или «агенте». 1 Элемент управления - это NSView, что означает две важные вещи в этих обстоятельствах.Во-первых, он представляет область окна, в которой нужно рисовать. Во-вторых, он принимает взаимодействие с пользователем. 2

Однако элемент управления сам по себе мало что делает.Ячейка - это то, что выполняет всю работу - обратите внимание, например, на то, что ячейки могут нарисовать себя в заданном кадре.Это ответственность представления, но элемент управления переносит это в ячейку, просто предоставляя область для рисования.

Аналогичным образом, когда пользователь нажимает на элемент управления, элемент управления получает событие и выясняет, что это такое.означает, что работа по выполнению действия в ответ на событие передается в ячейку.

Если вы посмотрите документы для различных пар управления / ячейки (NSButton и NSButtonCell являются такимипара), вы увидите упоминание о методах «покрытия».Это означает, что у элемента управления есть методы с такими же именами, что и у его соответствующей ячейки, которые просто обращаются к ячейке.Это источник дублирования, которое вы упомянули.Если вы хотите использовать один из этих методов, вызовите его на элементе управления - в качестве общедоступного лица пары, он, скорее всего, в любом случае просто спросит ячейку.

Лучшее описание взаимодействия, предоставленное Apple.is «Как взаимодействуют элементы управления и ячейки» в руководстве «Темы программирования управления и ячейки».


1 В смысле актера, имеющегоагент, который закупает концерты.
2 Это не совсем верно для всех просмотров;на самом деле это особенность NSResponder, от которой наследуется NSView.

2 голосов
/ 19 января 2016

Извлечено из Программирование какао для OS X: Руководство ранчо «Большой ботаник»

«Ячейка обрабатывает детали реализации элемента управления.По большей части свойства и методы ячейки «покрыты» идентичными свойствами и методами в соответствующем элементе управления.Например, когда вы изменяете заголовок на метке, ячейка метки выполняет свою работу, но вы взаимодействуете со свойством метки stringValue.

Клетки имеют долгую историю в Какао.Первоначально они были добавлены для решения проблем с производительностью: многие основные задачи элемента управления были переданы ячейке, что могло бы выполнять их более эффективно, чем элемент управления.

Компьютеры Mac намного мощнее, чем были в те дни, и клетки стали препятствием.Apple заявила, что в настоящее время она устарела, но вы все равно увидите их в схеме документа и в старом коде. ”

0 голосов
/ 28 января 2016

NSButtonCell - это подкласс NSActionCell, используемый для реализации пользовательских интерфейсов кнопок, переключателей и переключателей. Он также может быть использован для любой другой области представления, которая предназначена для отправки сообщения цели при нажатии. Подкласс NSButton из NSControl использует один NSButtonCell. Чтобы создать группы переключателей или переключателей, используйте NSMatrix, содержащий набор NSButtonCell s.

0 голосов
/ 24 мая 2011

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.

...