UITableView を任意の場所へスクロールする : Objective-C プログラミング

PROGRAM


UITableView を任意の場所へスクロールする

プログラムから UITableView を任意の場所へスクロールしたい場合には、UITableView の "scrollToRowAtIndexPath:atScrollPosition:animated:" メソッドを使用します。

// NSIndexPath で指定したセルが表示されるように UITableView をスクロールします。

NSIndexPath* indexPath = [NSIndex indexPathForRow:5 inSection:0];

 

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

たとえば UITableViewController から上のようにすることで、指定した 0 から始まるインデックス(上記の例では、最初のセクションの 6 番目の行)へ、UITableView がアニメーション付きで自動的にスクロールされます。

 

このとき "atScrollPosition" 引数で、指定したセルが表示される位置を調整することが可能です。

UITableViewScrollPositionTop 指定したセルが、表示領域の「一番上」に来るように移動します。
UITableViewScrollPositionMiddle 指定したセルが、表示領域の「中央」に来るように移動します。
UITableViewScrollPositionBottom 指定したセルが、表示領域の「一番下」に来るように移動します。
UITableViewScrollPositionNone 指定したセルが、表示領域内に来るように移動します。

UITableViewScrollPositionNone を指定した時の動きを整理してみると、以下のような感じです。

目的のセルが表示領域よりも上にある場合には、上方へスクロールしていってそれが登場したとき(一番上に来た時点)で停止します。表示領域よりも下にある場合は、下方へスクロールしていってそれが登場したとき(一番下に来た時点)で停止します。

既に表示領域内に目的のセルが表示されている場合には、その場からスクロールされることはないようでした。

 

指定したセルが選択された状態でスクロールされて欲しい場合には、次のようにします。

// NSIndexPath で指定したセルが選択状態になって表示されます。

NSIndexPath* indexPath = [NSIndex indexPathForRow:5 inSection:0];

 

[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];

このように "selectRowAtIndexPath:animated:scrollPosition:" を使用することで、指定したセルが選択状態になったまま、UITableView の指定した位置に移動されてきます。

ただ、不必要にセルが選択されたままの状態になっていると App Store の審査が通らないとも聞いたことがあるので、その辺りにも注意しながら使うといいかもしれません。

[ もどる ]