Разделение на подклассы NSControl
Если Вы собираетесь создать пользовательское NSControl
класс, выполняющий его собственную инициализацию, необходимо переопределить определяемый инициализатор (initWithFrame:
). Знайте, однако, что этот метод не вызывают, когда экземпляр Вашего подкласса класса управления Набором Приложения разархивирован от пера.
Если Вы создаете подкласс пользовательского элемента управления, соединяющийся с пользовательским подклассом ячейки — например, пользовательским подклассом NSSlider
и пользовательский подкласс NSSliderCell
— у Вас есть два способа связать экземпляр той пользовательской ячейки с экземпляром пользовательского элемента управления. Первый подход требует, чтобы у Вас было версия 3 Интерфейсного Разработчика. В Интерфейсном Разработчике при размещении управления в окно управление и его ячейка инстанцируют и при сохранении пользовательского интерфейса эти объекты (вместе с другими помещенными объектами) кодируются и сериализируются к файлу пера. Взаимодействуйте через интерфейс Разработчик также помогает Вам определить пользовательские подклассы, включая подклассы классов управления платформой такой как NSButton
и NSSlider
. Взаимодействуйте через интерфейс Разработчик также позволяет Вам изменять класс помещенного объекта управления к классу пользовательского элемента управления, но более ранние версии приложения не дают Вам способа сделать то же с пользовательскими ячейками, связанными с объектом управления.
Но версия 3.0 Интерфейсного Разработчика позволяет Вам установить класс ячейки управления. Чтобы сделать это, щелкните по управлению, чтобы выбрать его и щелкнуть правой кнопкой по мыши (Щелчок управления по однокнопочным мышам). Тогда щелкните в верхнем правом углу появляющегося раскрывающегося списка. Подменю перечисляет объекты под указателем мыши — включая ячейку управления. В случае NSSliderCell
объект, как показано на рисунке 1, подменю включает “элемент” Ячейки Ползунка. Выберите элемент ячейки.
Затем откройте окно Inspector для объекта выбранной ячейки. Найдите раздел «Object inspector» и в выборе поля комбинированного списка Custom Class (или войдите), имя Вашего пользовательского класса ячейки.
Если версия 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
не изменяет класс объекта ячейки, разархивированного от файла пера.