テキストビュー用のカスタム スクローラーを作成し (スクロールビューの awakeFromNib メソッドで開始)、アプリケーションの起動時にスクロールバーを表示するかどうかをユーザーが選択できるようにしたいと考えています。問題は、作成直後に非表示にし、スクロールビューのスクローラーに設定しても、スクローラーが常に表示されることです。奇妙なことに、イベントがトリガーされた後にスクローラーを非表示にしようとすると (たとえば、設定のチェックボックスをクリックして)、スクローラーが適切に非表示および表示されます。私は何を間違っていますか?どんな助けでも大歓迎です!
2 に答える
奇妙なことに、スクロール ビューにカスタム スクローラーを追加する前に、 を使用する必要がありますsetHasVerticalScroller:YES
。そうしないと、2 本指のスクロール ジェスチャを使用してスクロールできません。次に、ユーザーがスクロールバーを表示したくない場合はsetHasVerticalScroller:NO
、ドキュメントの windowControllerDidLoadNib メソッドで使用する必要があります。スクロールビューのawakeFromNib
メソッドにスクロールバーを追加した直後に使用すると機能しません。まあ、少なくとも今はうまくいくようです!
私は常にIBを使用してスクロールバーを設定し、そのうちの1つを抑制したい場合は次の行を使用しました:
[self.aScrollView setHasHorizontalScroller:NO]; // so only the vertical scrollbar is active
「hidden」プロパティを使用するのではなく、ユーザーが選択した場合は、後で awakeFromNib でその行を YES に設定してみてください。
PS IB に追加された NSTextView は常に NSScrollView に埋め込まれ、スクロールバーを制御するのはスクロールビューです。したがって、上記が機能しない場合は、テキストビューのスーパービューで setHasWhateverScroller を呼び出してみてください。
[[[aTextView superview] superview] setHasHorizontalScroller:NO];
「認識されないセレクター」エラーが発生した場合は、スーパービューを NSScrollView に明示的にキャストしてみてください (これは、スーパービューが実際に NSScrollView のインスタンスである場合にのみ機能します)。
[(NSScrollView *)[[aTextView superview] superview] setHasHorizontalScroller:NO];