2016-10-25 2 views
1

У меня очень простая программа какао. Одно окно, внутри которого находится NSTextView. В этой конфигурации NSTextView работает точно так, как вы ожидали. Я могу напечатать, отменить, повторить, все.Подклассификация NSTextView делает невозможным в Cocoa

Но тогда я подкласс NSTextView, назовем его TextView. Этот новый класс не отменяет никаких методов, это в основном пустой подкласс. Я заменяю NSTextView своим новым подклассом. Я могу печатать текст в TextView, но отмена не работает. Он просто подает звуковой сигнал. Пункт меню отмены отменяется. Я бы не ожидал, что это произойдет, поскольку TextView не добавляет никакого нового кода в структуру наследования объектов.

Что я должен сделать, чтобы мой TextView снова включил отмену?

GitHub project

XIB object hierarchy, "Text View" is my "TextView" class

Edit: при дальнейшем наблюдении, там действительно был прав в своем подклассе, который вызвал этот вопрос, так как полагал, Мохамад Farhand.

+1

Точно, как вы «заменить NSTextView с моим новым подклассом этого»? Удалили ли вы объект и добавили новый или вы просто изменили класс текстового вида в инспекторе идентификации? –

+0

Я изменил имя класса в инспекторе идентификации –

+1

Я просто попробовал это, и он работает для меня. Когда вы заменили текстовое представление, уверены ли вы, что вы не заменили прокрутки? Я не понимаю, почему это не сработало для вас. Возможно, у вас есть версия этого нерабочего кода на GitHub. – rein

ответ

0

Возможно, вам необходимо включить свойство allowsUndo вашего класса подкласса TextView.

@implementation TextView 

- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     self.allowsUndo = YES; 
    } 
    return self; 
} 

@end 
+0

Спасибо за ответ, но это не сработает. Тем не менее я не могу отменить. –