私は、私がかなり簡単で完全に受け入れられると思う何かをしようとしています。それ以外はそうではないようです。ビューコントローラのxibで定義されたUITextFieldをUITableViewCellsで使用できますか?
所有者がビューコントローラであるXIBを作成しました。そのXIBでは、特に複数のUITextFieldを作成し、ビューコントローラの適切なIBOutletsに配線しました。ビューコントローラは、コントローラのメインビューに含まれるUITableViewのデリゲートです。
テーブルビュー:cellForRowAtIndexPath:私は、あなたが望むように(識別子などを再利用する)UITableViewCellを作成します。次に、適切なIBOutletted UITextField(現在の行に応じて)をUITableViewCellのcontentView(最初にUITextFieldでremoveFromSuperviewを呼び出した後)に追加します。
ビューが最初に読み込まれるとき、これは正常に動作します。しかし、UITableViewにデータをリロードさせるアクションを実行すると、UITextFieldsで変なことが起こります。つまり、ほとんどはテーブルビューから消え始め、他のものは幅が劇的に縮小します。
私はやってはいけないことをしていますか?あなたが推測できるように、それらのUITextFieldをIBで設定することは、間違ったアプローチであることを除いて、非常に役に立ちます。
コードのtableViewからsnippit:cellForRowAtIndexPath:以下...
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
int row = indexPath.row;
if (indexPath.section == kSectionReg) {
NSString *reuseIdent = @"RegCell";
cell = [aTableView dequeueReusableCellWithIdentifier:reuseIdent];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseIdent] autorelease];
}
cell.detailTextLabel.font = [UIFont systemFontOfSize:15];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
if (row == [self rowIndexForRegEmail]) {
[regEmailText removeFromSuperview];
[cell.contentView addSubview:regEmailText];
cell.detailTextLabel.text = @"Email";
} else if (row == [self rowIndexForRegPassword]) {
[regPasswordText removeFromSuperview];
[cell.contentView addSubview:regPasswordText];
cell.detailTextLabel.text = @"Password";
... etc...
}
return cell;
}
'cellForRowAtIndexPath'メソッドでプログラムでテキストフィールドを作成したくない特別な理由はありますか? – sooper
IBで設定するにはそれぞれのテキストフィールドが異なるように設定されていますので、コードが混乱することがあります。また、既存の実装が機能するかどうかを確認したいので、すべてをやり直す必要はありません。 –