を使用してカスタム コントロールを作成していUITableView
ます。このコントロールは、1 つのセクションに複数の行がある単なるテーブル ビューです。と呼びましょうMyCustomControl
。
テーブル ビューのすべてのセルに、UITextField
コントロールを追加しました。
----------------
| ------------ |
|| Text Field || -> CELL
| ------------ |
----------------
このセルはただの defaultUITableViewCell
で、テキストフィールドを追加しました[cell addSubview:textField];
次のようなメソッドを使用して、テーブル ビューのすべてのテキスト フィールド コンポーネントにアクセスできます。
- (UITextField*) textFieldAtIndex:(NSInteger)index
{
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:index inSection:0];
UITableViewCell* cell = [self tableView:[self containerTableView] cellForRowAtIndexPath:indexPath];
UITextField* textField = [[cell subviews] lastObject];
return textField; // It should returning the reference of textField right??
}
むかしむかし、私はこれMyCustomControl
を自分のプロジェクトのどこかのビュー コントローラーで使用しました。
- (void) viewDidLoad
{
[super viewDidLoad];
CGPoint origin = CGPointMake(100.f, 100.f);
CGFloat width = 200.f;
// Create custom control with text field generated as many as given parameter
MyCustomControl* textGroup = [[MyCustomControl alloc] initWithOrigin:origin width:width textFieldCount:2];
// Here is the problem, I try to set current view controllers's text fields
// with the text field generated by MyCustomControl.
// Text field returned are new text field with same properties instead of reference.
self.txtUsername = [textGroup textFieldAtIndex:0]; // Text Field are copied!
self.txtPassword = [textGroup textFieldAtIndex:1]; // Not return a pointer!
[self.txtUsername setDelegate:self]; // Fail
[self.txtPassword setDelegate:self]; // Fail
[[self view] addSubview:textGroup];
[[self view] addSubview:[self txtUsername]]; // New text field appeared on view
}
MyCustomControl
メソッドからアクセスするテキスト フィールドを完全に制御できるtextFieldAtIndex:
と思っていましたが、そのテキスト フィールドを参照する代わりに、View Controller にテキスト フィールドの新しいコピーを取得しました。そして、そのテキストフィールドのデリゲートを設定することも、他のすべてのものをテキストのように設定することもできません。
このテーブル ビュー セルのテキスト フィールドから参照を取得するにはどうすればよいですか?