Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

4.4 UITableViewのその他のオプション、カスタマイズ

ginrou edited this page Apr 23, 2013 · 5 revisions

4.3までで、最低限のUITableViewの使い方は紹介しました。 この章では、4.3までで説明できなかったけど、よく用いられるtableviewの機能を紹介します。

目次

  1. Section
  2. Header, Footer
  3. RefreshControll

1. Section

4.1で紹介したように、UITableViewは行ごと(cell)だけでなく、Sectionによって区切ることができます。 セクションで区切ることで、表示するデータをグルーピングして表示することができます。

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/sections.png

セクションを追加する時に必要なメソッドは - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView のみで、TableViewに表示するセクションの数を返してやります。 行数は各セクションごとに区切られ、tableview全体で通しの番号でないので注意してください

セクションを実際に使ってみる

4.1の終了時のものまで一度戻してみてください(面倒な場合は、githubのソースコードからプロジェクトファイルを開いてください)

新しく作り直す時、必要な処理は

  1. サンプルプロジェクトを作る
  2. xibでviewControllerにtableviewを貼付け、ソースコードと紐づける
  3. ヘッダファイルで UITableViewDataSourceとUITableViewDelegateの委譲を宣言し、実装する。必要なメソッドは以下の二つです
  • tableView:numberOfRowsInSection:
  • tableView:cellForRowAtIndexPath:

以上です。

では実際にセクションを追加します。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

この状態で実行すると、次のようになると思います。 表示するテキストは [NSString stringWithFormat:@"(%d, %d)", indexPath.section, indexPath.row]としました。

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/result_1.png

セクションの区切りが出来ているのが分かるかと思います。 tableviewのスタイルをgroupedにすると、より分かれて表示できます。

セクションにはタイトルを付けることもできます。delegateメソッドの一つである、tableView:titleForHeaderInSection:でタイトルを返すことができます。 例えば、以下のように実装すると

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [NSString stringWithFormat:@"%d 番目のセクション", section];
}

実行結果は次のようになります

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/result_2.png

2. Header, Footer

タイトルだけでなく、各セクションごとにヘッダとフッタを作ることで、よりリッチな表現をすることができます。 ヘッダをカスタマイズする場合は、次のメソッドを実装します。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

このメソッドでは、headerの高さを返します。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

このメソッドでは、実際にheaderとなるviewを作って返します。

この二つを実装することでヘッダを表示することが出来ます。

実際にヘッダを作ってみる。

上述の通り、二つのメソッドを追加することでヘッダを追加することができます。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 120.0;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)];
    view.backgroundColor = [UIColor redColor];
    return view;
}

今回は高さ120pxで、背景色が赤のviewを貼付けました。 以下のようになれば正解です!

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/result_3.png

フッタについて

フッタもヘッダと同様に高さを返すメソッドと、viewを作るメソッドを実装すれば実現することが出来ます。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

の二つです。headerと同じ処理になるので、詳解は割愛します。

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/result_4.png

3. UIRefreshControll

UIRefreshControllとは、引っぱり更新やPullToRefreshと呼ばれるアクションをサポートするUIで、tableviewを一番上までスクロールしてさらに引っ張ることでデータを更新するUIです。

iOS6からこの機能がOSに実装されて、もはやスタンダードとなっているこのUIコンポーネントを紹介します。

前提条件など

このコンポーネントは、UITableViewControllerというview controller の機能の一つとして提供されています。 そのため、UITableViewControllerを継承したクラスを作り、その中で実装する必要があります。

仕組み

  • UIRefreshControll は UIView > UIControll を継承しているview コンポーネントです。
  • ある一定量以上引っ張られると UIControlEventValueChanged のcontroll eventが飛ばされます
    • このイベントを取得できるようにセレクタを登録しておきます
    • 一定量以上引っ張ると、tableview上部でクルクル回り続けます
  • 処理が終わったら、- (void)endRefreshingを呼ぶことでrefresh controll をしまうことができます。

https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/4.4/RefershControll.png

実際に使ってみる

  1. UIRefershControllはUITableViewControllerのプロパティとして利用できるので、UITableViewControllerのサブクラスを一つ作ります。
  • xibファイルなども自動生成されます
  • .mファイルのなかで、セクションの数と行の数を適宜修正してください(warning ディレクティブが出ています)
  1. AppDelegateを以下のように書き換えてください
self.viewController = [[TVSRefreshSampleViewController alloc] init];
self.window.rootViewController = self.viewController;

(TVSRefreshSampleViewControllerはUITableViewControllerを継承したクラスです) 下準備はここまでです。 3. UIRefreshControlの準備 - view controllerのviewDidLoadに以下を追加してください

// UIRefreshControlの生成
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];

// refreshControllがforControlEvents:UIControlEventValueChangedを発火した時に受け取るメソッドをneedRefreshにする
[refreshControl addTarget:self action:@selector(needRefresh:) forControlEvents:UIControlEventValueChanged];

// tableViewControllerのrefeshControlとしてセット
self.refreshControl = refreshControl;
  1. 受け取るメソッドの実装 - 引っぱり更新されたときのメソッドです - 先ほど、needRefreshというメソッドを指定したのでそのメソッドを追加します。
- (void)needRefresh:(UIRefreshControl *)sender
{
    [self performSelector:@selector(finishRefresh) withObject:nil afterDelay:3.0];
}

実際のコードではここにモデルの更新などの処理が含まれます。ここでは3.0秒後にfinishRefreshというメソッドを実行します。finishRefreshは次のように、refreshControlにendRefreshingを送るだけのメソッドとなっています。

- (void)finishRefresh
{
    [self.refreshControl endRefreshing];
}

ここまで実装すると、おそらく引っぱり更新ができるようになっていると思います。

この章はここまでです。お疲れ様でした。

はじめに

  1. iOSについて

  2. Xcode最初のステッフ

  3. 導入

  4. Objective C の基礎

  5. メモリ管理

  6. 1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)

  7. 1.3 UIViewController1 UIViewController のカスタマイズ(storyboard)

  8. UIViewController2 - ModalViewController

  9. UIViewController2 - ModalViewController(storyboard)

  10. UIViewController3 - ライフサイクル

  11. HomeWork 1 Objective C の基本文法

  12. HomeWork 2 UIViewControllerとModalViewController

  13. HomeWork 3 UIViewController + Animation

  14. UIKit 1 - container, rotate-

  15. UINavigationController

  16. UITabController

  17. Custom Container View Controller

  18. Supporting Multiple Interface Orientations

  19. HomeWork 1 - タブバーからモーダルビューを表示する

  20. HomeWork 2 - NavigationController

  21. HomeWork 2.3 デバイスことに回転対応

  22. UIKit 2- UIView -

  23. UIView

  24. UIView のカスタマイズ

  25. UIView Animation

  26. HomeWork 1 - UIScrollView

  27. UIKit 3 - table view -

  28. UITableView について

  29. UITableViewとNavigationController

  30. custom UITableViewCell の作成

  31. UITableViewのその他のオプション、カスタマイズ

  32. HomeWork 1 - Dynamic height with a custom uitableviewcell

  33. UIKit 4 - image and text -

  34. UIImagePickerController

  35. Assets Library

  36. UITextFiled, UITextView

  37. KeyboardNotification

  38. Homework 1 - フォトの複数枚選択

  39. ネットワーク処理

  40. NSURLConnection

  41. JSONのシリアライズとデシリアライズ

  42. UIWebView

  43. ローカルキャッシュと通知

  44. NSUserDefaults, Settings Bundle

  45. NSFileManager

  46. Key Value Observing

  47. NSNotification、NSNotificationCenter を用いた通知

  48. UILocalNotification

  49. Blocks, GCD

  50. Blocks

  51. GCD

  52. 【演習】GCD,-Blocksを用いたHTTPリクエストマネージャの作成

  53. 設計とデザインパターン

  54. クラス設計 1

  55. クラス設計 2

  56. [クラス設計演習] (https://github.com/mixi-inc/iOSTraining/wiki/9.3-%E3%82%AF%E3%83%A9%E3%82%B9%E8%A8%AD%E8%A8%88%E6%BC%94%E7%BF%92)

  57. 開発ツール

  58. Instruments, デバッガ

  59. CocoaPods

  60. テスト

  61. iOS開発におけるテスト

  62. GHUnit

  63. Kiwi

  64. KIF

  65. In-App Purchase

  66. In-App Purchase

  67. 付録

  68. Tips of Xcode

  69. Auto Layout 入門

  70. Auto Layout ドリル

Edit sidebar

Clone this wiki locally