こんにちは。

最近ペースが落ち気味なのは重々承知ですが、なんとかがんばってます。

前回はプログラムをするだけして、結局画面にはなんも変化ないとこで終わってしまいました。

今日はいくぞ。

前は「CustomizedCellModel.m」まで終わったというところでした。

では「CustomizedCell.h」を修正します。

赤いとこが追加部分ね。
表示内容のデータを利用できるように、ヘッダファイルをインポートしてて、
名前と電話番号を表示するラベルを扱うメンバー変数を宣言してます。
で、最後に表示内容のデータをセットするメソッドを宣言してます。

#import < UIKit/UIKit.h>
#import "CustomizedCellModel.h"

@interface CustomizedCell : UITableViewCell {
UILabel *nameLabel;
UILabel *phoneLabel;

}

- (void)setModel:(CustomizedCellModel *)model;

@end



次は「CustomizedCell.m」です。
けっこうがっつり追加します。
ラベルの表示位置をサイズを定義しておいて、
initWithStyle~のメソッドでラベルの生成やら、初期化などを行ってます。
で、セルに表示内容オブジェクトをセットするためにsetModel:メソッドを実装してます。


#import "CustomizedCell.h"


@implementation CustomizedCell

#define NAME_X 90
#define NAME_Y 13
#define NAME_W 150
#define NAME_H 12

#define PHONE_X 90
#define PHONE_Y 29
#define PHONE_W 150
#define PHONE_H 20


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// Initialization code
// name
CGRect nameFrame = CGRectMake(NAME_X, NAME_Y, NAME_W, NAME_H);
nameLabel = [[UILabel alloc] initWithFrame:nameFrame];
[nameLabel setFont:[UIFont systemFontOfSize:[UIFont smallSystemFontSize]]];
[nameLabel setTextColor:[UIColor grayColor]];
[self.contentView addSubview:nameLabel];

// phone
CGRect phoneFrame = CGRectMake(PHONE_X, PHONE_Y, PHONE_W, PHONE_H);
phoneLabel = [[UILabel alloc] initWithFrame:phoneFrame];
[phoneLabel setMinimumFontSize:[UIFont smallSystemFontSize]];
[phoneLabel setAdjustsFontSizeToFitWidth:TRUE];
[self.contentView addSubview:phoneLabel];


}
return self;
}


~(中略)~


- (void)setModel:(CustomizedCellModel *)model {
if (model == nil) {
return;
}

self.accessoryType = [model hasDisclosure]
? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
[nameLabel setText:[model name]];
[phoneLabel setText:[model phone]];
}


@end





最後に「ContactListViewController.m」です。
これはデフォルトのセルの代わりにカスタマイズしたセルでテーブルが表示される様に修正してます。
まず、CustomizedCellクラスのヘッダファイルをインポート。
表示内容にあわせてセルの高さをあわせるために、tableView:
heightForRowAtIndexPath:メソッドを実装します。
カスタマイズしたセルを使える様にtableView:cellForRowAtIndexPath:の中身を修正します。
以前のはコメントとして、ここでは赤文字で追加コードとして載せてます。


#import "ContactListViewController.h"
#import "CustomizedCell.h"

~(中略)~


- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {

return 60;
}


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

static NSString *CellIdentifier = @"CustomizedCell";

CustomizedCell *cell = (CustomizedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomizedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}


// Set up the cell...
CustomizedCellModel *model
= [[CustomizedCellModel alloc] initWithPersonalData:[
manager loadPersonalDataAtIndex:indexPath.row]
hasDisclosure:FALSE];
[cell setModel:model];

return cell;

/*
static NSString *CellIdentifier = @"Cell";

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

// Set up the cell...
cell.textLabel.text = [[manager loadPersonalDataAtIndex:indexPath.row] name];
// [cell setTextLabel:(UILabel *):[[manager loadPersonalDataAtIndex:indexPath.row] name]];
return cell;
*/

}




ここまでできたら、一通り完成です。。

ちゃんとうごくかな?

無知の状態からiPhoneアプリ開発に挑んでみる-9-1-1
無知の状態からiPhoneアプリ開発に挑んでみる-9-1-2

名前と一緒に電話番号が表示されました!

いやーめでたしめでたし。。

でもこれで、前やろうとしていたセルの編集とか削除とかを始められるということなんで、
まだまだ、これからなんです。。。。

にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村

 > 次のテーマ テーブルをつくっていこう。
 > テーブルのデータを管理するクラスを作ってみる
 > テーブルビューのコントローラーを作ってみる。
 > ついにテーブルの表示完成!
 > テーブルをいじくる。
 > テーブルを本当にいじくる
 > テーブルを本当に実装を始めるよ。
 > テーブルを改造しましょ。
 > テーブル改造のつづきやけど。。
 > テーブルのセルに電話番号を追加してみる。(★この記事★)
 > モード切り替え用ボタンの追加
 > セル(データ)の削除処理と並び替え!
 > テーブルいじくりも大詰め?
 
みなさんこんばんは、

最近更新が滞りやすくなってしまって、すいません。。。

ちょっと最近忙しいもんで、なかなか記事が書けない。


一つ書くのに結構時間がかかるのよね。

・・・とは言ってられない。見てくださっている人がいるから。。

ほんまにいるのかな。ヽ(;´Д`)ノ


っでもめげずに続けていきますので、安心を!

次は月曜か火曜くらいになりそう。。。


では!!
テーブル改造のつづきやけど、、、

みなさんすいません。。。

大事な作業を忘れておりました。

セルの操作の前に、データの一つ一つに電話番号を表示しようと思っていたのを

わすれていたんです。

じゃぁやっていきますよ。

まず、ファイルを追加します。

まず、いつものように「ファイルの追加」を選んで、、
無知の状態からiPhoneアプリ開発に挑んでみる-8-24-1

無知の状態からiPhoneアプリ開発に挑んでみる-8-24-2

名前はCustomizedCellModel.m

として.hも同時に追加するのをお忘れなく。

で次もファイルを追加するんですが、下の図の様に、「UITableView」を選択しましょう。
ファイル名はCustomizedCell.mとしてます。
無知の状態からiPhoneアプリ開発に挑んでみる-8-24-3

ファイル追加の結果下の様になります。
下の4つが追加したやつです。
無知の状態からiPhoneアプリ開発に挑んでみる-8-24-4


ではコードをいじっていきます。

PersonalData.hで、赤いとこが追加したところです。
電話番号に対応するメンバ変数の宣言と、プロパティの宣言です。
#import < Foundation/Foundation.h>

@interface PersonalData : NSObject {
NSString *name;
NSString *phone;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *phone;
@end




次、
PersonalData.mです。でもこれは、一部ですよ。
さっき宣言したプロパティの実装ディレクティブを追加してます。
@implementation PersonalData
@synthesize name;
@synthesize phone;
@end



PersonalDataManager.m(一部)
ここでは、電話番号を追加したことにあわせて修正します。
// names
NSArray *names = [NSArray arrayWithObjects:
@"愛 飢え夫",
@"下記 句け子",
@"指し 周世僧",
@"達 津手斗",
@"何 抜寝乃",
@"葉比 負へ帆",
@"真美 無眼藻",
@"揶 由余",
@"等裏 流列路",
@"輪 ヲん",
nil];
// phones
NSArray *phones = [NSArray arrayWithObjects:
@"011-22-3333", @"011-111-1111", @"093-333-3333", @"014-444-4444",
@"01-7777-7777", @"099-999-9999", @"08-8888-8888", @"09-5555-5555",
@"017-777-9999", @"01-2222-2222",
nil];



NSMutableArray *tempDataList
= [[NSMutableArray alloc] initWithCapacity:[names count]];

for (int i = 0; i < [names count]; i++) {
PersonalData *personalData = [[[PersonalData alloc] init] autorelease];
personalData.name = [names objectAtIndex:i];
personalData.phone = [phones objectAtIndex:i];
[tempDataList addObject:personalData];
}

return tempDataList;





CustomizedCellModel.h
名前、電話番号の表示/非表示判別に対応したメンバ変数を宣言して各メンバ変数のプロパティ宣言をしまてます。
んで、最後に個人情報データを引数とする初期化メソッドを宣言してます。
#import < Foundation/Foundation.h>
#import "PersonalData.h"

@interface CustomizedCellModel : NSObject {
NSString *name;
NSString *phone;
BOOL hasDisclosure;

}
@property (nonatomic, retain, readonly) NSString *name;
@property (nonatomic, retain, readonly) NSString *phone;
@property (nonatomic, readonly) BOOL hasDisclosure;

- (id)initWithPersonalData:(PersonalData *)data hasDisclosure:(BOOL)newDisclosure;

@end



CustomizedCellModel.m
んで、先ほど宣言したプロパティの実装ディレクティブを追記して、
先ほど宣言した初期化メソッドを実装してます。
#import "CustomizedCellModel.h"


@implementation CustomizedCellModel

@synthesize name;
@synthesize phone;
@synthesize hasDisclosure;

- (id)initWithPersonalData:(PersonalData *)data hasDisclosure:(BOOL)newDisclosure {

if (data == nil) {
return nil;
}

if ((self = [super init]) == nil) {
return nil;
}

name = [[data name] copy];
phone = [[data phone] copy];
hasDisclosure = newDisclosure;

return self;
}


@end




ここまで、なんとかできましたでしょうか?

いざ実行!

エラーはない!

でも画面になんの変化もない!!!
ごめん。次に期待してくださいな。

 > 次のテーマ テーブルをつくっていこう。
 > テーブルのデータを管理するクラスを作ってみる
 > テーブルビューのコントローラーを作ってみる。
 > ついにテーブルの表示完成!
 > テーブルをいじくる。
 > テーブルを本当にいじくる
 > テーブルを本当に実装を始めるよ。
 > テーブルを改造しましょ。
 > テーブル改造のつづきやけど。。(★この記事★事)
 > テーブルのセルに電話番号を追加してみる。
 > モード切り替え用ボタンの追加
 > セル(データ)の削除処理と並び替え!
 > テーブルいじくりも大詰め?