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 の審査が通らないとも聞いたことがあるので、その辺りにも注意しながら使うといいかもしれません。
[ もどる ]