4

テーブルビューのスクロールに問題があります。

フレームでスクロールビューをxibにドラッグしました。

そして、プログラムでテーブルビューを作成し、これを次のようにスクロールビューに追加しています:

NSRect frame = [[ScrollView contentView] bounds];
rTableView = [[MTableView alloc] initWithFrame:frame];

MTableViewカスタムクラスの継承NSTableViewであり、コンストラクターでテーブルビューに列を追加しています。

[ScrollView setDocumentView: resultsTableView];
[ScrollView setHasVerticalScroller:YES];
[ScrollView setHasHorizontalRuler:YES];

[rTableView setDelegate:self];
[rTableView setDataSource:self];
[ScrollView addSubview: rTableView];

[rTableView reloadData];

データをロードするデリゲート関数を作成し、テーブルにデータを入力しています。しかし、スクロールは機能しません。テーブルに 100 行あり、テーブル ビューの初期ロード時に最初の 21 行を表示できます。スクロールしても何も起こらず、行インデックス (データ デリゲートにある) は常に 19 または 20 です。ここで何が問題なのかわかりません。私はスタックオーバーフローでいくつかの古い投稿を見てきましたが、ドキュメントに従っていましNSTableViewたが、あまり役に立ちませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

1

次の行を除いて、すべてを正しく行っています。

[ScrollView addSubview: rTableView];

スタンダードNSScrollViewNSTableViewアレンジに1NSTableViewセットのセットdocumentViewが付きNSScrollViewます。コードでプログラムによってこの関係を適切に設定しました。

[ScrollView setDocumentView: resultsTableView];

行を追加する[ScrollView addSubview: rTableView]と、意図しない方法でテーブル ビューが追加されました。基本的に、この追加は、その下にある適切にスクロールするテーブル ビューが表示されないようにするためだけに機能します。

その行を削除すると[ScrollView addSubview: rTableView]、テーブル ビューが正しく表示され、スクロール メカニズムが正しく機能するようになります。

AnNSScrollViewには、スクロール アーキテクチャを構成する多数のサブビューがあります (「Scroll View Programming Guide for Mac」を参照)。Interface Builder パレットで利用可能な標準の " NSTableViewinside an NSScrollView" を調べると、スクロール ビューに 4 つの直接のサブビューがあることがわかります。

"<NSClipView: 0x103507200>",
"<NSScroller: 0x101b14f80>",
"<NSScroller: 0x101b15210>",
"<NSClipView: 0x103507be0>"

クリップビューの 1 つは を保持し、もう 1 つは をNSTableView保持しNSTableHeaderViewます。NSScrollViewsetDocumentView:でを使用 [ScrollView setDocumentView: resultsTableView]すると、テーブル ビューがそれぞれNSClipViewの のドキュメント ビューに適切に設定されます。一方、テーブル ビューを の直接のサブビューとして追加するNSScrollViewと、予期しない結果が発生します。

于 2012-12-14T05:34:44.327 に答える