UIRefreshControl:オフィシャル版「引っ張って更新」

Filed under iOS SDK, Objective-C
Tagged as , , , ,

以前このブログでも書きましたがアプリ「Tweetie」で発明された「引っ張って更新」UIですが、iOS6ではOS標準のUIとして取り込まれました!
UIRefreshControl
このUIを使う手順をメモしておきます。
このUIの名前は“UIRefreshControl”です。オフィシャルリファレンスはこちら→UIRefreshControl Class Reference
使い方は洗練されていて、本当に簡単なのですが備忘録として、下記にサラッと解説を書いておきます。

生成、準備

まずは生成ですが、適当にallocし、保持しておきます。
次に、引っ張ったときのアクションを設定します。
あと、色も変えられるので、アプリに合わせて調整すると良いかもしれませんね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)viewDidLoad
{
  // viewDidLoadなどで下記コードにて初期化し、viewDidUnloadでreleaseしてください.
  UIRefreshControl* refreshControl = [[UIRefreshControl alloc] init];
  [refreshControl addTarget:self
                     action:@selector(refresh:)
           forControlEvents:UIControlEventValueChanged];
  [refreshControl setTintColor:[UIColor blueColor]];
 
  // 注:実際には、refreshControlはインスタンス変数などで保持してください.
}
 
- (void)refresh:(id)sender
{
  NSLog(@"refresh!");
  // ここにリフレッシュ時の処理を記述.
}

テーブルビューやスクロールビューに適用

さて、あとは適用すれば完了なわけです。UITableViewControllerの場合、パラメータが追加されているので、それに与えます。

1
2
// UITableViewControllerの場合.
self.refreshControl = refreshControl;

UITableViewを直接使っている場合でも、次のようにaddSubviewするだけです。

1
2
// UITableView* tableViewにくっつける場合.
[tableView addSubview:refreshControl];

また、後者の方法であれば、UIScrollView、UIWebViewにも使えるようです。

開始したり、止めたり

引っ張って更新したあとのアニメーションは自分で止めないといけません。

1
2
// 更新終了時などに呼び出します.
- (void) endRefreshing;

また、引っ張ったとき以外にもアニメーションはさせることも出来ます。

1
- (void) beginRefreshing;

便利っすねー。

iOS6未満のための対応

ちょっと悩んだのがiOS6未満のための対応。
インスタンス変数として UIRefreshControl* を持っておくとしたら、その値をどう定義するのか?
UIRefreshControlの基底クラスである UIControl* か、id のどちらかで持っておくのがよさそうです。
で使うときに (UIRefreshControl*)でキャストしてやる。例えば、下記のようなコードでとりあえず問題無いと思います。

1
2
// .h
UIControl* refreshControl;
1
2
3
4
5
6
7
8
// .m
if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0") ){
  refreshControl = [[UIRefreshControl alloc] init];
  [refreshControl addTarget:self
                     action:@selector(buttonRefreshPressed:)
           forControlEvents:UIControlEventValueChanged];
  [(UIRefreshControl*)refreshControl setTintColor:[UIColor blueColor]];
}

※上記コードのOSバージョン判定マクロについてはこちら参照してください→「iOSのバージョンをチェックするマクロ」

類似オープンソースライブラリ

以上でUIRefreshControlの説明は終わりですが、前述したようにiOS6以上でない使えないのが一番の問題です。
しかし、既にオープンソースで同様の機能、同様の見た目(!)を持つライブラリもあります!
二つほどよさそうなのがあったので紹介したいと思います。

ODRefreshControl

ほとんど同じ使い勝手、同じような見た目のものが、iOS4以上で使えるようです!
しかし、このライブラリ自体はARC必須なので、ARCを使わないプロジェクトに組み込むときにはちょっと設定が必要です。
MITライセンス。

ISRefreshControl

これはiOS5以上で使えるものですが、iOS6の場合、そのままUIRefreshControlを返すそうです!
MITライセンス。

その他

別デザインのものは、前に書いたブログを読んでくださいー。


[AD]

↓一度読んでみたいなー。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

著者/訳者:Dustin Boswell Trevor Foucher

出版社:オライリージャパン( 2012-06-23 )

定価:

Amazon価格:¥ 2,592

単行本(ソフトカバー) ( 260 ページ )

ISBN-10 : 4873115655

ISBN-13 : 9784873115658


↓githubの肝はPullRequestなのだ!という特集。

WEB+DB PRESS Vol.69

著者/訳者:大塚 弘記 渡辺 修司 堤 智代 森田 創 中島 聡 A-Listers はまちや2 川添 貴生 井上 誠一郎 近藤 宇智朗 ヒノケン 後藤 秀宣 佐藤 鉄平 mala 奥野 幹也 伊藤 智章

出版社:技術評論社( 2012-06-23 )

定価:

Amazon価格:¥ 5,500

大型本 ( 192 ページ )

ISBN-10 : 4774151041

ISBN-13 : 9784774151045


Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)