1

3 つの異なるタイプのカスタム セルを使用してテーブルを作成していますUITextField。このカスタム セルを使用して 2 つの行を作成します。両方の行のテキストフィールドにタグとデリゲートを設定しました。私の問題は、テーブルをスクロールすると、テキストフィールドを含むこれらの行が上に移動して画面から消え、下にスクロールするとアプリがクラッシュすることです。次のようなエラーが表示されます

-[CellImageViewController txtField]: unrecognized selector sent to instance 0xa0ea5e0

これが私のコードですcellForRowAtIndexPath:

if (indexPath.row == 0 )
        {
            if (cell == nil) {
                cell = [[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
            }

            cell.txtField.tag =1;

            cell.txtField.delegate = self;
            cell.txtField.text = @"kjfkd";
            }


            return cell;

        }
        else if(indexPath.row==1)
        {
            if (cell == nil) {
                cell = [[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
            }

           cell.txtField.tag = 2;
           cell.txtField.text = @"glk";
           cell.txtField.delegate = self;

          return cell;
     }

誰でもこの問題について考えがありますか?

4

8 に答える 8

1

異なるタイプのセルがあるため、それぞれに異なる cellIdentifier を使用する必要があります。

これを試して:

customOrNormalCell *cell [tableView dequeueReusableCellWithIdentifier:CellIdentifier]
if(!cell){
    cell = [[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];
}

このコードでは、各 cellIdentifier は 1,2,3,4... (すべて異なります)

私はそれが問題を解決すると確信しています

于 2013-04-23T12:46:45.180 に答える
0

私も自分のプロジェクトでこの問題に直面していました。

これを試してみてください:

Tableviewのscrollingプロパティを無効にして、scrollviewを作成します。次に、テーブルビューをscrollviewに追加します。

UITableView  *table=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 976, 395) style:UITableViewStylePlain];
[table setSeparatorStyle:UITableViewCellSelectionStyleNone];
UIScroll *scroll=[[UIScrollView alloc]initWithFrame:CGRectMake(24, 168, 978, 395)];
 [table setScrollEnabled:NO];

[scroll addSubview:table];
[self.view addSubview:scroll];
[scroll sendSubviewToBack:table];
于 2013-01-29T12:11:48.767 に答える
0

なぜ各行に​​セルを定義するのですか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
 CellWithTextFieldViewController  *cell = (CellWithTextFieldViewController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


  if(cell == nil)
  {
    cell =[[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];

    cell.txtField.tag = indexPath.row;
    cell.txtField.text = [SET TEXT FROM ARRAY];
    cell.txtField.delegate = self;
  }
}
于 2013-01-29T12:06:43.070 に答える
0

わかりませんが、セルを再利用したときに、テキストフィールドのデリゲートが解放されたのかもしれません。設定できるかもしれません

  textfield.deleagate = self;

CellWithTextFieldViewController.m 内

于 2014-04-28T09:16:09.817 に答える
0

これを試して

     static NSString *cellIdentifier= @"Cell";

    CellWithTextFieldViewController *cell = (CellWithTextFieldViewController *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

        if (cell == nil) {
            cell = [[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

        cell.txtField.tag =indexPath.row+1;

        cell.txtField.delegate = self;
        cell.txtField.text = @"kjfkd";

        return cell;
于 2013-01-29T12:30:55.690 に答える
0

tableView をスクロールしている間、セルが再利用されます。それが textField が消えている理由です。カスタム セルごとに異なるセル ID を使用してみてください。セル識別子に nib ファイルで同じ ID を指定することを忘れないでください

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *customCellOne = @"customCell1";
static NSString *customCellTwo = @"customCell2";
UITableViewCell *cell =nil;



if (0 == indexPath.row)
{
    cell = (CustomCellOne *)[tableView dequeueReusableCellWithIdentifier:customCellOne];

    if (nil == cell)
    {
        // Create custom cell one and do what ever you want

    }
}
else if (1 == indexPath.row)
{
    cell=(CustomCellTwo *)[tableView dequeueReusableCellWithIdentifier:customCellTwo];

    if (nil == cell)
    {
         // Create custom cell two and do what ever you want       
    }

}

return cell;

}

于 2013-01-29T12:32:24.210 に答える
0

作成するUITextField前に作成UITableViewし、セルのコンテンツビューに Textfield オブジェクトを追加します

[cell.contentView addSubview:yourTxtFieldOblect];
于 2013-01-29T12:02:49.413 に答える
0

異なるタイプのセルを再利用しているようです。プロパティにアクセスする前に、再利用しているセルがどの種類のクラスであるかを確認してください。

于 2013-01-29T12:04:50.427 に答える