0

20行の単純なtableViewがあります。サブクラスのカスタム UITableview セルを作成し、cellforRowAtIndex で、3 行おきにテキスト フィールドをセルに追加します。上下にスクロールすると、テキスト フィールドが間違った行に表示されます。UItextfield をカスタム セルの一部にすることはできないことに注意してください。これは、チェックボックス、ラジオ ボタンなど何でもかまいませんが、簡単にするために UITextfield を選択しました...何が間違っていますか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
  {
    static NSString *CellIdentifier = @"TestCellIdentifier";
    testCell *cell = (testCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if(!cell)
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
else{

    //HMMM I also tried removing it before adding it- it doesn't work neither
    for(UIView *v in cell.subviews){
        if(v.tag == 999 ){
            [v removeFromSuperview];
        }
    }

   //add UItextField to row if it's divisible by 3 
    if(indexPath.row %3 ==0){

        UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(400, 10, 300, 30)];
        textField.borderStyle = UITextBorderStyleRoundedRect;
        textField.font = [UIFont systemFontOfSize:15];
        textField.placeholder = [NSString stringWithFormat:@"%d",indexPath.row];
        textField.autocorrectionType = UITextAutocorrectionTypeNo;
        textField.keyboardType = UIKeyboardTypeDefault;
        textField.returnKeyType = UIReturnKeyDone;
        textField.clearButtonMode = UITextFieldViewModeWhileEditing;
        textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        textField.tag = 999;

        [cell addSubview:textField];
    }
}


cell.textLabel.text = [NSString stringWithFormat:@"%d",indexPath.row];


return cell;
}
4

2 に答える 2

0

細胞を再利用することは良いことであり、できるはずです。

デリゲート プロトコル メソッドで、再利用のためにキューに入れられる前に、セルが画面外になったときにセルからテキスト フィールドを削除することを検討できます。

– tableView:didEndDisplayingCell:forRowAtIndexPath:

行番号がわかれば、テキストフィールドを削除するかどうかがわかります。


説明を追加するために編集されました:

一見、あなたのコードは問題ないように見えるので、ちょっとしたテスト プロジェクトを行いました。元のコードの問題は、間違った「ビュー」にテキスト フィールドを追加していることです。UITableViewCells には注意が必要な構造があります。UITableViewCell contentView プロパティのドキュメントを見てください。部分的に次のように述べています。

ビューを追加するだけでセルをカスタマイズする場合は、それらをコンテンツ ビューに追加して、セルが編集モードに移行したり終了したりするときに適切に配置されるようにする必要があります。

したがって、コードはセルの contentView のサブビューを追加して列挙する必要があります。

    for(UIView *v in cell.contentView.subviews){
        if(v.tag == 999 ){
            [v removeFromSuperview];
        }
    }
...
   textField.tag = 999;
   [cell.contentView addSubview:textField];
于 2013-11-15T16:01:33.850 に答える
0

再利用性を使用しないでください。このシーンでは、再利用性は使用しません

于 2013-11-15T03:40:05.627 に答える