2012-04-10 14 views
0

スクロールビュー内にフィールドエディタ(NSTextField用)を埋め込んだ経験はありますか?私は編集中にNSTextFieldをスクロール可能にしようとしています。私が試したNSScrollViewにフィールドエディタを埋め込む

物事:カスタムフィールドエディタの-becomeFirstResponderが呼び出されるとき

  1. は、動的にそれを埋め込みます。この半作品。 NSScrollViewのうち「マスカレード」フィールドエディタを作成します

  2. - 問題はNSTextFieldは、カスタムフィールドエディタは、もはやそれをリサイズします(アコーディオン スタイルのアプリケーションを作成すると、私はこれを必要とする)編集していない時にサイズを変更しますときということですNSInvocationを使用してメソッドを実際の代理フィールドエディタに転送します。これは私が実際に働くことを望む方法です。私はリストされたすべてのメソッドを実装しましたhere;フィールドエディタが実際にロードされるときはいつでもEXC_BAD_ACCESSが得られます(例えば[customTextField selectText:nil]と呼ぶとき)。私はゾンビを有効にしていても、デバッガから情報を収集することはできません。NSObjCMessageLoggingEnabledのログを見ると、何も得られません。それはthese guysのように働いているようだが、それは7年前だった。

最後は完全にNSTextFieldsをドロップし、NSTextViewsを使用する(またはその代わりに、フィールドエディターメカニズムに頼って、1を自分で書く)ことであろうが、私は一つだけが編集されるのデータの多くの行を持っているので、 NSTextViewをインスタンス化する必要はありませんが、おそらくそれほど悪くはありません。

答えて

0

私はオプション1を使用して終了し、あまり問題なく動作するようになりました。オプション2は完全な行き止まりでした。なぜならEXC_BAD_ACCESSがどこにでも出てきたからです。

私のカスタムフィールドエディタは、(カスタム)スクロールビューへの参照を保持して(vvScrollView)に埋め込み、ビュー階層に挿入します。すぐに、フィールドエディターがファーストレスポンダになると呼ばれ、自動的にビュー階層に挿入されたスクロールビュー、内側に埋め込むための私のカスタムフィールドエディタ(NSTextView)内部マイコード:

- (void)embedSelfInScrollView { 
    NSView *realSuperview = [[self superview] superview]; 
    // [self superview] is some kind of private NSClipView class 
    if ([realSuperview isKindOfClass:[NSTextField class]]) { // the expected behavior: this may change? TODO make less prone to chance 
     [realSuperview addSubview:[self vvScrollView]]; // insert into view 
     [[self vvScrollView] setFrameSize:[realSuperview frame].size]; // se the initial size equivalent to control size so it can autoresize the same way 
     // add the scrollview into the view hierarchy 
     [[self vvScrollView] setDocumentView:self]; // removes self from previous superview 
    } 
} 

最初の問題私は、編集中にNSTextFieldのサイズを変更できるようにするために、ほとんどすべての自動サイジングオプションを破ったフィールドエディタ(NSClipViewのプライベートクラス)のすぐ上のスクロールビューにスクロールビューを挿入しようとしていました。さらに進んでプライベートクラスをバイパスすることはうまくいくようですが、ほとんど恣意的と思われます。

関連する問題