Как взаимодействуют средства управления и ячейки

Средства управления обычно связываются с одной или более ячейками — экземпляры подкласса абстрактного класса NSCell. Ячейка управления (или ячейки) обычно соответствуют только в границах управления. Ячейки являются объектами, которые могут привлечь себя и реагировать на события, но они могут сделать так только косвенно на инструкцию от их управления, действующего как своего рода координирование фона.

Средства управления управляют поведением своих ячеек. Наследованием от NSView средства управления получают возможность ответить на пользовательские действия и представить их экранное представление. Когда пользователи щелкают по управлению, оно отвечает частично путем отправки trackMouse:inRect:ofView:untilMouseUp: к ячейке, по которой щелкнули. После получения этого сообщения ячейка отслеживает мышь и может иметь контроль, отправляют сообщение действия ячейки в его цель (или на мышь или постоянно, в зависимости от атрибутов ячейки). Когда средства управления получат запрос дисплея, их, в свою очередь, отправьте их ячейку (или ячейки) a drawWithFrame:inView: сообщение для имения ячеек привлекает себя.

Это отношение управления и ячейки делает две вещи возможными: управление может управлять ячейками различных типов и с различными целями и действиями (см. ниже), и единственное управление может управлять многократными ячейками. Большинство средств управления Набором Приложения, как NSButtons и NSTextFields, управляет только отдельной ячейкой. Но некоторые средства управления, особенно NSMatrix и NSForm, управляют многократными ячейками (обычно того же размера и атрибутов, и расположенный в регулярном образце). Поскольку ячейки являются более легким весом, чем средства управления, с точки зрения наследованных данных и поведения, более эффективно использовать управление мультиячейки, а не многократные средства управления.

Много методов NSControl — особенно методов, устанавливающих или получающих значения и атрибуты — имеют соответствующие методы в NSCell. Отправка сообщения к управлению заставляет его быть переданным ячейке управления или (если управление мультиячейки) его выбранная ячейка. Однако много методов NSControl являются эффективными только при средствах управления с отдельными ячейками (они отмечены в описаниях метода).

Подкласс NSControl не должен использовать подкласс NSCell для реализации себя — NSScroller и NSColorWell являются примерами не делающих NSControls. Однако такие подклассы должны заботиться о подробных данных, которые иначе обработал бы NSCell. В частности они имеют к переопределенным методам, разработанным для работы с ячейкой. К тому же, отсутствие ячейки означает, что Вы не можете использовать возможность NSMatrix управления мультимассивами ячеек, такими как переключатели.