Есть ли надежный способ переопределения CellClass в классах, производных от NSControl?
Этот вопрос, кажется, задавали несколько раз, но я так и не нашел окончательного ответа. Я полностью осознаю тот факт, что NSCell «постепенно прекращается». Это здорово (и давно пора!), но здесь и сейчас это не помогает. Предположим, я хочу создать подкласс NSImageView, который (например) обрезает изображение с маской произвольной формы. Я мог бы определить это так:
class MaskedImageView : NSImageView {
public override class var cellClass: AnyClass? {
get { MaskedImageCell.self }
set {}
}
MaskedImageCell, разумеется, наследуется от NSImageCell. Этот код прекрасно компилируется в Swift 5.x, но класс ячейки никогда не меняется. Добавление оператора super.cellClass = newValue к указанному выше установщику свойств также не имеет значения. (На самом деле базовый механизм AppKit устанавливает класс ячейки не так. Если я добавлю оператор печати в средство получения свойств, я увижу, что AppKit опрашивает класс ячейки, как я и ожидал, но он никогда не использует это.)
Как я уже сказал, я знаю, что NSCell уходит. Но, безусловно, есть несколько вариантов использования, когда было бы полезно изменить класс ячеек, чтобы добавить особенности, необходимые для конкретного приложения. Если это невозможно СЕЙЧАС , то предполагается, что нужно попытаться воспроизвести всю функциональность (например) NSImageCell. Я бы точно не хотел этого!
Все конструктивные замечания принимаются с благодарностью. И, пожалуйста, имейте в виду, что на самом деле я не заинтересован в добавлении масок странной формы в NSImageViews. Что мне нужно, так это окончательное решение проблемы введения собственного класса клеток в смесь. 7 лет назад нам сказали, что NSCell устарел, но пока он все еще с нами, у нас должен быть механизм для введения пользовательских классов ячеек.