Вы можете думать о контроле как о представителе ячейки или «агенте». 1 Элемент управления - это NSView
, что означает две важные вещи в этих обстоятельствах.Во-первых, он представляет область окна, в которой нужно рисовать. Во-вторых, он принимает взаимодействие с пользователем. 2
Однако элемент управления сам по себе мало что делает.Ячейка - это то, что выполняет всю работу - обратите внимание, например, на то, что ячейки могут нарисовать себя в заданном кадре.Это ответственность представления, но элемент управления переносит это в ячейку, просто предоставляя область для рисования.
Аналогичным образом, когда пользователь нажимает на элемент управления, элемент управления получает событие и выясняет, что это такое.означает, что работа по выполнению действия в ответ на событие передается в ячейку.
Если вы посмотрите документы для различных пар управления / ячейки (NSButton
и NSButtonCell
являются такимипара), вы увидите упоминание о методах «покрытия».Это означает, что у элемента управления есть методы с такими же именами, что и у его соответствующей ячейки, которые просто обращаются к ячейке.Это источник дублирования, которое вы упомянули.Если вы хотите использовать один из этих методов, вызовите его на элементе управления - в качестве общедоступного лица пары, он, скорее всего, в любом случае просто спросит ячейку.
Лучшее описание взаимодействия, предоставленное Apple.is «Как взаимодействуют элементы управления и ячейки» в руководстве «Темы программирования управления и ячейки».
1 В смысле актера, имеющегоагент, который закупает концерты.
2 Это не совсем верно для всех просмотров;на самом деле это особенность NSResponder
, от которой наследуется NSView
.