2009/02/13

[Objective-C][iPhone sdk]ヘッダーがついた表を出力

前回は、各セルに文字列が入った表の出力だったので、今日は、それにヘッダーをつけてみようかなと。

まず、新規プロジェクトを作成する時に、「Navigation-Based Application」を選択してファイルを作ります。

例によって、Interface Builderは使わないっす。

ファイル作成後、「RootViewController.h」と「RootViewController.m」が、「hogeAppDelegate.h」と「hogeAppDelegate.m」以外に作成されていると思います。

なので、最初は、RootViewController.hから入りたいと思います。

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController {
NSArray *names;
}

@property (readwrite, retain) NSArray* names;
@end

前回の「set_table.h」と変わりません。

続きましては、RootViewController.mです。
#import "RootViewController.h"

@implementation RootViewController

@synthesize names;

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}

#pragma mark Table view methods

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


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


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
     reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
cell.text = [names objectAtIndex:indexPath.row];
return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath {
}

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


@end

たぶん、前回と9割同じで、違う部分は、initWithStyleメソッドがないことです。

これは、最初、ファイル作成時になかったので、このままにしておきました。

ちなみに、今回も、セクションは1で、セルの数は、10個でいきます。

では、次に、「output_table_selectAppDelegate.h」です。
(ファイル名をoutput_table_selectとしました。)
#import <UIKit/UIKit.h>

@interface output_table_selectAppDelegate : NSObject {

UIWindow *window;
UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@end

まったく編集していないです。
前回と違うのは、UINavigationControllerの型で宣言されている変数が一つ増えたことぐらいではと思います。

最後に、「output_table_selectAppDelegate.m」
#import "output_table_selectAppDelegate.h"
#import "RootViewController.h"


@implementation output_table_selectAppDelegate

@synthesize window;
@synthesize navigationController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {

RootViewController* rootViewController =
[[RootViewController alloc] initWithStyle:UITableViewStylePlain];

rootViewController.names = [NSArray arrayWithObjects:
@"hoge1"
, @"hoge2"
, @"hoge3"
, @"hoge4"
, @"hoge5"
, @"hoge6"
, @"hoge7"
, @"hoge8"
, @"hoge9"
, @"hoge10"
, nil
];

rootViewController.title = @"いや〜ん";
navigationController = [[UINavigationController alloc]
initWithRootViewController:rootViewController];

[rootViewController release];

// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}


- (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
}


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

@end

このファイルは2段階で構成されていて、rootViewController.title = @"いや〜ん";までの部分では、各セルに値をセットし、titleメソッドでヘッダーのタイトルを設定しています。

前回と違って、セルに値をセットする時に、retainメソッドを使っていない理由ですが、書いてビルドをかけたらバグったので、はずしました。

以降は、navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];で、作った表をnavigationControllerに貼付け、さらに、貼付けられたnavigationControllerを[window addSubview:[navigationController view]];によってウィンドウに貼付けています。

今回は、2段階に構成されていた処理でした。

最後に、実行結果を貼付けます。

Photobucket

0 コメント:

コメントを投稿