TableViewの更新イベント

よくTableViewをドラッグで上から下へ引き出すと更新するという動作がアプリではよくあります。また、TableViewの一番下で下から上に引き出してさらに読み込むという作業を行うこともよくあります。ここでは、これらのイベントの導入方法について解説します。

更新動作

 上から下へ引き出して更新する動作は、viewDidLoadに以下の命令を書いておきます。

var refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: Selector("RefreshArticles"), forControlEvents: UIControlEvents.ValueChanged)
self.refreshControl = refreshControl

これで、更新動作をするとRefreshArticlesという関数が実行されます。viewDidLoadの下辺りに

func RefreshArticles() {
    //ここに更新動作
    self.tableView.reloadData()
    self.refreshControl?.endRefreshing()
}

とRefreshArticles関数を準備しておきましょう。reloadDataでTableViewの内容を更新しています。そして、endRefreshingで更新のクルクルを消しています。クルクルを表示させたい場合はbeginRefreshingを使います。

読み込み動作とスクロール動作

「最下層までいってスクロールすると起こる動作イベント」と「下から上へといったスクロールの動作イベント」の追加方法について紹介します。方法としては

  1. ドラッグの検出(scrollViewWillBeginDragging)
  2. TableViewのスクロールの検出(scrollViewDidScroll)

を組み合わせて実現します。詳細は以下の通りです。

    override func scrollViewWillBeginDragging(scrollView: UIScrollView) {
        scrollBeginingPoint = scrollView.contentOffset;
    }
    
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        var currentPoint = scrollView.contentOffset;
        if scrollBeginingPoint != nil{
            if(scrollBeginingPoint!.y > currentPoint.y){
                println("下へスクロール")
            }else{
                println("上へスクロール")
                if self.tableView.contentOffset.y >= self.tableView.contentSize.height-self.tableView.bounds.size.height{
                    println("Reading")
                }
            }
            
            scrollBeginingPoint = nil
        }
    }

 

著者:安井 真人(やすい まさと)