さて、テーブルをちょこちょこいじくってきましたが、

今回が最後(になると思う)ですかね。

前回の最後に宣言した通り、セルの一つ一つに住所データを関連づけて、

クリック(タップ)されたらその住所をポップアップで表示するようにしてみよかと思う。

まず、住所データをどっかに持っておかないといけないですね。

まずは電話番号を追加したみたいに、宣言うんぬんかんぬんを記述します。

PersonalData.hでっす。住所のメンバ変数とプロパティ宣言ですね。
必要なところだけ部分的に抜き出してますよ。

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

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


続いて、PersonalData.mでっす。
これも今まで同じで、先ほど宣言したプロパティの実装ディレクティブを追記しまてます。
これも必要なところだけ部分的に抜き出してますよ。

@implementation PersonalData
@synthesize name;
@synthesize phone;
@synthesize address;
@end




さてさて、次はデータの生成処理の部分です。
名前や電話番号がずらずら書いてあったPersonalDataManager.mを修正します。
これも今までと同じなんで、なんなく追加できますね。

~中略~
// 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];

// addresses
NSArray *addresses = [NSArray arrayWithObjects:
@"大阪府大阪市北区1丁目2番33号",
@"大阪府大阪市都島区4丁目5番66号",
@"大阪府大阪市福島区7丁目8番9号",
@"大阪府大阪市此花区1丁目11番11号",
@"大阪府大阪市中央区2丁目3番地",
@"大阪府大阪市西区4丁目5番6号",
@"大阪府大阪市港区7番8号",
@"大阪府大阪市大正区9丁目10番11号",
@"大阪府大阪市天王寺区12丁目13番14号",
@"大阪府大阪市浪速区15丁目16番17号",
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];
personalData.address = [addresses objectAtIndex:i];
[tempDataList addObject:personalData];
}

return tempDataList;
}
@finally {
[pool release];
}

return nil; // will be never reached
}

~中略~




はい、これでデータに「住所」項目が追加されました。
行を選択した時にこの住所がポップアップで表示されるようにします。

ContactListViewController.mを触ります。
最初の3行はデリゲートメソッドから呼ばれるプライベートメソッドを宣言してます。
その先のtableView didSelectRowAtIndexPath:メソッドの実装は、元々メソッドはあるので、
中身を修正すればよいですね。これは、行選択時に動作を設定するデリゲートメソッドです。
で、最後の大きな固まりは、最初の3行で宣言したメソッドのロジック部分です。

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

@interface ContactListViewController (PrivateMethods)
- (void)displayDialogWithPersonalData:(PersonalData *)personalData;
@end


@implementation ContactListViewController

~中略~

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

[self displayDialogWithPersonalData:[manager loadPersonalDataAtIndex:indexPath.row]];

}

- (void)displayDialogWithPersonalData:(PersonalData *)personalData {

NSString *displayInformation = [NSString stringWithFormat:@"%@\n%@\n%@",
[personalData name], [personalData phone], [personalData address]];

UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:displayInformation delegate:self cancelButtonTitle:nil
destructiveButtonTitle:@"OK" otherButtonTitles:nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view];
[actionSheet release];
}






これで実行しても、一応動作するのですが、なんかいっこWarningがでるのが気持ち悪いので、ContactListViewController.hを修正します。
これは、ContactListViewControllerが、UIActionSheetDelegateプロトコルに適合することを宣言しているそうですwなんなんでしょ?
必要なところだけ部分的に抜き出してるけど、大事な部分は赤い部分の追加ね。


@interface ContactListViewController : UITableViewController < UIActionSheetDelegate> {
PersonalDataManager *manager;
}



これで実装は完了です!!

いざ実行!!

これ初期画面。

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

クリックすると!!
無知の状態からiPhoneアプリ開発に挑んでみる-9-14-2
達 津手斗(たち つてと)さんの住所が丸見えです!
OKを選択すると閉じます。

データを右にフリックすると、
従来通り、Deleteボタンが出てきます。
削除もできますし、

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

右上のEditボタンで、編集モードにしてから、削除もできるし
行の並べ替えもできることを確認しました!

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

ふー、テーブルのいじくりも終わりました。

次の題材を探さないとね。

そんなに遠くないと思うけど、ではまたまたお目にかかる日まで!

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

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