25

NSTableView に行を動的に追加しています。[table reloadData] を発行すると、スクロール ビューが移動するのがわかります。手で移動すると、テーブルに新しい値が表示されます。しかし、どうすれば自動的にスクロールできますか?

4

4 に答える 4

44
NSInteger numberOfRows = [tableView numberOfRows];

if (numberOfRows > 0)
    [tableView scrollRowToVisible:numberOfRows - 1];

テーブルの最後に行を追加していると仮定します。

(データ ソースの代わりにテーブル ビューに行数を要求する理由は、この数が、テーブル ビューが認識しており、スクロールできる行数であることが保証されているためです。)

于 2009-11-25T20:40:10.080 に答える
19

次のようなものを使用します。

 [table scrollRowToVisible:indexOfNewRow];
于 2009-11-25T20:34:50.760 に答える
1

以下に示すように、didAddRowView を使用して適切に機能するように解決しました。明らかに、新しいレコードを追加する場合、テーブルビューは新しい行ビューを作成する必要があります。

- (void)tableView:(NSTableView *)tableView  didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
// it sends notification from all tableviews.
// I am only interested in the dictionary...

if (tableView == dictTableView){
    if ( row == [dictTableView numberOfRows]-1){
        [dictTableView scrollRowToVisible:row];
    }
}

}

しかし、私の IBAction では、add ステートメントをコントローラーに実行した後に 2 行追加しました。

- (IBAction)addNewDictItem:(id)sender {
NSInteger row=[[theDictArrayController arrangedObjects]count];

[theDictArrayController add:sender];
[dictTableView noteNumberOfRowsChanged];
[dictTableView scrollRowToVisible:row-1];

}

于 2016-06-12T13:45:27.543 に答える