SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

iPhoneプログラミング: Table Viewを使ってデータを表示する

Table Viewの行にテキスト、イメージ、ディスクロージャボタンを表示

  • X ポスト
  • このエントリーをはてなブックマークに追加

Table Viewへの行の追加

 Table Viewに行を追加するには、RootViewController.mファイル内で2つのメソッドを実装する必要があります。リスト1に示す、米国の州の可変配列を作成するステートメントを追加します。

リスト1 州名一覧を作成
#import "RootViewController.h"
@implementation RootViewController

NSMutableArray *listOfStates;

- (void)viewDidLoad {
    //---initialize the array---
    listOfStates = [[NSMutableArray alloc] init];
    
    //---add items---
    [listOfStates addObject:@"ALABAMA"];
    [listOfStates addObject:@"ALASKA"];
    [listOfStates addObject:@"ARIZONA"];



    [listOfStates addObject:@"ARKANSAS"];
    [listOfStates addObject:@"CALIFORNIA"];
    [listOfStates addObject:@"COLORADO"];
    [listOfStates addObject:@"CONNECTICUT"];
    [listOfStates addObject:@"DELAWARE"];
    [listOfStates addObject:@"FLORIDA"];
    [listOfStates addObject:@"GEORGIA"];
    [listOfStates addObject:@"HAWAII"];
    [listOfStates addObject:@"IDAHO"];
    [listOfStates addObject:@"ILLINOIS"];
    [listOfStates addObject:@"INDIANA"];
    [listOfStates addObject:@"IOWA"];
    [listOfStates addObject:@"KANSAS"];
    [listOfStates addObject:@"KENTUCKY"];
    [listOfStates addObject:@"LOUISIANA"];
    [listOfStates addObject:@"MAINE"];
    [listOfStates addObject:@"MARYLAND"];
    [listOfStates addObject:@"MASSACHUSETTS"];
    [listOfStates addObject:@"MICHIGAN"];
    [listOfStates addObject:@"MINNESOTA"];
    [listOfStates addObject:@"MISSISSIPPI"];
    [listOfStates addObject:@"MISSOURI"];
    [listOfStates addObject:@"MONTANA"];
    [listOfStates addObject:@"NEBRASKA"];
    [listOfStates addObject:@"NEVADA"];
    [listOfStates addObject:@"NEW HAMPSHIRE"];
    [listOfStates addObject:@"NEW JERSEY"];
    [listOfStates addObject:@"NEW MEXICO"];
    [listOfStates addObject:@"NEW YORK"];
    [listOfStates addObject:@"NORTH CAROLINA"];
    [listOfStates addObject:@"NORTH DAKOTA"];
    [listOfStates addObject:@"OHIO"];
    [listOfStates addObject:@"OKLAHOMA"];
    [listOfStates addObject:@"OREGON"];
    [listOfStates addObject:@"PENNSYLVANIA"];
    [listOfStates addObject:@"RHODE ISLAND"];
    [listOfStates addObject:@"SOUTH CAROLINA"];
    [listOfStates addObject:@"SOUTH DAKOTA"];
    [listOfStates addObject:@"TENNESSEE"];
    [listOfStates addObject:@"TEXAS"];
    [listOfStates addObject:@"UTAH"];
    [listOfStates addObject:@"VERMONT"];
    [listOfStates addObject:@"VIRGINIA"];
    [listOfStates addObject:@"WASHINGTON"];
    [listOfStates addObject:@"WEST VIRGINIA "];
    [listOfStates addObject:@"WISCONSIN"];
    [listOfStates addObject:@"WYOMING"];

    [super viewDidLoad];
}

- (void)dealloc {
    [listOfStates release];
    [super dealloc];
}

@end

 次に、Table Viewに表示する行数を制御するtableView:numberOfRowsInSection:メソッドを実装します。次のコードでは、行数をlistOfStates配列の項目数に設定して、Table Viewに追加する行数を指定します。

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section {
   return [listOfStates count];
}

 次に、Table View内の特定の位置にセルを挿入するtableView:cellForRowAtIndexPath:メソッドを実装します。このイベントは、Table Viewの1行につき1回トリガされます。ただし、このメソッドは最初から最後まで一気に連続して呼び出されるわけではありません。例えば、表示できる行が全部で100行あっても、このメソッドは現在表示されている行についてのみ連続してトリガされます。その後、ユーザーがTable Viewをスクロールダウンすると、次に表示される行セットについてtableView:cellForRowAtIndexPath:メソッドが呼び出されます。次のコードでは、listOfStates配列から個別の項目を取得して、Table Viewに挿入します。

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    
UITableViewCell *cell = [tableView 
    dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
            initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:CellIdentifier] 
            autorelease];
    }
    
    NSString *cellValue = [listOfStates objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
    
    return cell;
}

 具体的には、UITableViewクラスのdequeueReusableCellWithIdentifier:メソッドを使用してUITableViewCellクラスのインスタンスを取得します。dequeueReusableCellWithIdentifier:メソッドは再利用可能なTable Viewのセルオブジェクトを返します。セルオブジェクトが再利用可能であるという点は重要です。なぜなら、10,000行にも及ぶ大きなテーブルの場合は、1行につき1つのUITableViewCellオブジェクトを作成するとパフォーマンスやメモリ使用量に大きな影響を与えるからです。また、Table Viewで一度に表示される行数は決まっているため、スクロールによって表示外に出たセルを再利用することは理にかなっています。これが、dequeueReusableCellWithIdentifier:メソッドで行っている処理の内容です。

 例えば、Table Viewに10行が表示される場合、作成されるUITableViewCellオブジェクトは全部で10個だけです。この10個が、ユーザーがTable Viewをスクロールする中で再利用されるわけです。

 手始めはこのくらいにしましょう。command+Rキーを押して、iPhone Simulatorでアプリケーションをテストします。図5は、行が追加されたTable ViewをiPhone Simulatorで表示した様子を示しています。

図5 行を追加したTable View:サンプルアプリケーションをiPhone Simulatorで実行した様子。Table Viewに追加した行が表示されている
図5 行を追加したTable View:サンプルアプリケーションをiPhone Simulatorで実行した様子。Table Viewに追加した行が表示されている

次のページ
ヘッダーとフッターの追加

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4690 2010/04/19 19:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング