Разделение на подклассы NSControl

Если Вы собираетесь создать пользовательское NSControl класс, выполняющий его собственную инициализацию, необходимо переопределить определяемый инициализатор (initWithFrame:). Знайте, однако, что этот метод не вызывают, когда экземпляр Вашего подкласса класса управления Набором Приложения разархивирован от пера.

Если Вы создаете подкласс пользовательского элемента управления, соединяющийся с пользовательским подклассом ячейки — например, пользовательским подклассом NSSlider и пользовательский подкласс NSSliderCell— у Вас есть два способа связать экземпляр той пользовательской ячейки с экземпляром пользовательского элемента управления. Первый подход требует, чтобы у Вас было версия 3 Интерфейсного Разработчика. В Интерфейсном Разработчике при размещении управления в окно управление и его ячейка инстанцируют и при сохранении пользовательского интерфейса эти объекты (вместе с другими помещенными объектами) кодируются и сериализируются к файлу пера. Взаимодействуйте через интерфейс Разработчик также помогает Вам определить пользовательские подклассы, включая подклассы классов управления платформой такой как NSButton и NSSlider. Взаимодействуйте через интерфейс Разработчик также позволяет Вам изменять класс помещенного объекта управления к классу пользовательского элемента управления, но более ранние версии приложения не дают Вам способа сделать то же с пользовательскими ячейками, связанными с объектом управления.

Но версия 3.0 Интерфейсного Разработчика позволяет Вам установить класс ячейки управления. Чтобы сделать это, щелкните по управлению, чтобы выбрать его и щелкнуть правой кнопкой по мыши (Щелчок управления по однокнопочным мышам). Тогда щелкните в верхнем правом углу появляющегося раскрывающегося списка. Подменю перечисляет объекты под указателем мыши — включая ячейку управления. В случае NSSliderCell объект, как показано на рисунке 1, подменю включает “элемент” Ячейки Ползунка. Выберите элемент ячейки.

Рисунок 1  , Выбирающий ячейку управления в Интерфейсном Разработчике
Selecting the cell of a control in Interface Builder

Затем откройте окно Inspector для объекта выбранной ячейки. Найдите раздел «Object inspector» и в выборе поля комбинированного списка Custom Class (или войдите), имя Вашего пользовательского класса ячейки.

Рисунок 2  , Устанавливающий пользовательский класс ячейки управления
Setting the custom cell class of a control

Если версия 3.0 Интерфейсного Разработчика не доступна, у Вас все еще есть программируемый способ присвоить экземпляр пользовательской ячейки к пользовательскому элементу управления, проиллюстрированному в Перечислении 1. В подклассе пользовательского элемента управления, когда все объекты разархивированы от файла пера, создают экземпляр пользовательской ячейки и присваивают все это подходящие атрибуты текущей ячейки. Тогда установите пользовательскую ячейку как ячейку управления с помощью setCell: метод NSControl.

  Создание перечисления 1 и установка пользовательской ячейки для пользовательского элемента управления

- (void)awakeFromNib {
    MySliderCell *newCell = [[MySliderCell alloc] init];
    id oldCell = [self cell];
    [newCell setImage:[oldCell image]];
    [newCell setMinValue:[oldCell minValue]];
    [newCell setMaxValue:[oldCell maxValue]];
    [newCell setSliderType:[oldCell sliderType]];
    // ....  set other slider cell attributes
    [self setCell:newCell];
    [newCell release];
}

Можно переопределить cellClass метод каждый раз, когда управление должно сделать новую ячейку для себя — например, если с этим инстанцируют initWithFrame:. initWithFrame: метод использует возвращаемое значение cellClass выделить и инициализировать NSCell объект корректного типа.

  Переопределение перечисления 2 cellClass

+ (Class) cellClass
{
    return [MySliderCell class];
}

Обратите внимание на то, что переопределение cellClass метод класса NSControl не изменяет класс объекта ячейки, разархивированного от файла пера.