CoreData Resipeサンプルより。
iPhone : CoreData レシピサンプルを探る
編集可能なテーブルを作るには、
編集可能なテーブルビューセルを作成して使用する。
実装はほとんどなくて、Interface Bulderメインで作成する。セルの操作のためのIBOutletプロパティを設定するだけ。
IB側はこんな感じ
labelとtextfieldになるセルの部分だけを作成する。
手順
1:クラスの作成
新規ファイル>NSObject>種類はUITableViewCellのサブクラス
ViewControllerクラスで作っちゃだめです。
2:xibの作成
新規ファイル>View XIB
3:xibを編集
デフォルトのViewを削除しTableViewCellに変更。
TableViewCellのクラスをEditingTableViewクラスに変更
TableViewCellを配置して、labelとtextFieldを追加する。
TableViewCellのアウトレットにlabelとtextFieldを接続。
File's OwnerのNew Referencing OutletにtextFieldのdelegateを接続する。
後はテーブルビューコントローラーを作って、File's Ownerのクラスに設定する。
さらにFile's Owner経由でテーブルコントローラーのプロパティにEditingTableViewCellを接続する。
テーブルビューコントローラークラス内にXIBを直接読み込んで使用する。
バンドルからXIBを読み込んで、EditiongTableViewCellクラスのViewへ接続する。
編集可能セルとテーブルビューは1セットということになる。複数箇所で使う場合は複数セット用意することになりそう。
EditingTableViewCellクラス
EditingTableViewCellクラスの中身はこんだけ
//インターフェース部
@interface EditingTableViewCell : UITableViewCell {
UILabel *label;
UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end
//実装部
#import "EditingTableViewCell.h"
@implementation EditingTableViewCell
@synthesize label, textField;
- (void)dealloc {
[label release];
[textField release];
[super dealloc];
}
@end
これを使いたいテーブルビューコントローラーのtableView:cellForRowAtIndexPathメソッドで設定してあげればよい。
Table View Controllerクラス
//インターフェース側
#import
@class EditingTableViewCell;
@interface AnkiEditTableViewController : UITableViewController {
@private
//なぜプライベートで宣言するのか?
EditingTableViewCell *editingTableViewCell;
}
@property (nonatomic, assign) IBOutlet EditingTableViewCell *editingTableViewCell;
@end
//実装部
//全体は省略して必要なところだけ
//エディットに入れたいので、セレクトさせないようにする。
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.allowsSelection = NO;
self.tableView.allowsSelectionDuringEditing = NO;
}
// セルに設定する
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifire = @"EDITOR_TABLEVIEWCELL";
EditingTableViewCell *cell = (EditingTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifire];
if (cell == nil) {
//バンドルからXIBの読み込み
[[NSBundle mainBundle] loadNibNamed:@"EditingTableViewCell" owner:self options:nil];
//IB上で接続されている。
cell = editingTableViewCell;
self.editingTableViewCell = nil;
}
return cell;
}
EditingTableViewCellはIBOutletとインターフェースを毎回変更すれば、ほとんどそのままで使い回せる。
単純に編集可能なテーブルを生成するだけなら、毎回変更しなくてもこのままでもいい。ビューコントローラークラスの指定を変更するだけでよい。
これくらい公式で用意しておいてくれると助かるのに。