2016-10-25 2 views
1

私は非常にシンプルなCocoaプログラムを持っています。 1つのウィンドウで、その内部にNSTextViewがあります。この構成では、NSTextViewは期待通りに動作します。私は入力、元に戻す、やり直し、すべてを行うことができます。NSTextViewをサブクラス化すると、ココアで取り消しが不可能になる

しかし、NSTextViewをサブクラス化してTextViewを呼び出すことができます。この新しいクラスは、どのメソッドもオーバーライドしません。基本的に空のサブクラスです。私はNSTextViewを新しいサブクラスに置き換えます。 TextViewにテキストを入力することはできますが、元に戻すことはできません。それは私にビープ音です。取り消しメニュー項目はグレー表示されます。 TextViewはオブジェクト継承構造に新しいコードを追加しないので、これが起こるとは思わないでしょう。

元に戻すには、TextViewをどうすればよいですか?

GitHub project

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

編集:モハマドFarhandが意見を述べたとして、さらに観察すると、確かに、問題の原因となった、私のサブクラスで編集がありました。

+1

正確にどのように「それの私の新しいサブクラスでNSTextViewを置き換える」しましたか?オブジェクトを削除して新しいオブジェクトを追加しましたか、アイデンティティインスペクタでテキストビューのクラスを変更しましたか? –

+0

アイデンティティ・インスペクタのクラス名を変更しました –

+1

私はこれを試しました。テキストビューを置き換えたときに、スクロールビューを置き換えていないことを確認してください。なぜそれがあなたのために働かなかったのか分かりません。おそらく、GitHubでこの非動作コードのバージョンをホストしてください。 – rein

答えて

0

サブクラス化されたTextViewクラスのallowsUndoプロパティを有効にする必要があります。メソッドのオーバーライド

@implementation TextView 

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

@end 
+0

返事をありがとうが、これは動作しません。まだ元に戻すことはできません。 –

関連する問題