4 つのセクションに分かれた約 20 の異なるフィールドを含む登録フォームを作成しようとしています。そのためのカスタムセルを作成しました。これにはラベルとUITextFieldが含まれており、テーブルビューにラベルの名前とテキストフィールドのタグを示す辞書の配列があります(タグによっては、UIPicker を使用してデータを入力します)。
問題は、フィールドの編集を開始すると、下にスクロールしてすべてをバックアップすると、すべてが台無しになり、フィールドで変更されるべきではないということです...セルをデキューしているため、これは明らかに起こっていることに気づきました。重複した参照を作成するので、毎回新しいセルを作成しようとしましたが、必要なセルの正確な量でテーブルビューを初期化するだけで、内容(ラベルもテキストフィールドも)を持たない空白のセルだけを初期化するため、うまくいきません。 .
ボタンが押されたときに値を取得する必要があるという事実を考慮して、セルごとに異なるメモリ参照を保持できるようにする最も簡単な方法は何でしょうか?
この投稿の提案を読みましたが、セルの配列を作成する方法についてはまだわかりません。
何か助けはありますか?
これは私の定義のコードです:
NSArray *section1 = [[NSArray alloc] initWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"100",@"tag",@"Title",@"title",@"title",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"First Name",@"title",@"first_name",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Last Name",@"title",@"last_name",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Job Title",@"title",@"job_title",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Email",@"title",@"email",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Confirm Email",@"title",@"confirm_email",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Password",@"title",@"password",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Confirm Password",@"title",@"conf_password",@"fieldName",nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"0",@"tag",@"Phone",@"title",@"phone",@"fieldName",nil],
nil];
....
self.formItems = [[NSArray alloc] initWithObjects:
section1,
section2,
section3,
section4,
section5,
nil];
そして、cellForRowAtIndexPath で使用するコードは次のとおりです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"freeTrialFormCell";
TSIFreeTrialFormCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[TSIFreeTrialFormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSArray* sectionData = [self.formItems objectAtIndex:indexPath.section];
NSDictionary* myFieldInfo = [sectionData objectAtIndex:indexPath.row];
if ([[myFieldInfo objectForKey:@"fieldName"] rangeOfString:@"password"].location != NSNotFound) {
cell.textField.secureTextEntry = YES;
}
cell.fieldName = [myFieldInfo objectForKey:@"fieldName"];
cell.textField.placeholder = [myFieldInfo objectForKey:@"title"];
cell.textField.tag = [[myFieldInfo objectForKey:@"tag"] integerValue];
cell.label.text = [myFieldInfo objectForKey:@"title"];
return cell;
}