1

我正在创建一个包含三种不同类型的自定义单元格的表格,其中一个自定义单元格具有UITextField. 我使用这个自定义单元格创建了两行。我为两行的文本字段设置标签和委托。我的问题是,当我滚动表格时,这些带有文本字段的行向上移动并从屏幕上消失,向下滚动时,我的应用程序崩溃了。我收到一个错误,例如

-[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

尝试这个

     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

为什么要为每一行定义单元格?

- (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

看起来您可能正在重用不同类型的单元格。在尝试访问它的属性之前,请尝试确保您正在重用的单元格是哪种类。

于 2013-01-29T12:04:50.427 回答
0

我不知道,可能是在重用单元格时,文本字段委托被释放。可能你可以设置

  textfield.deleagate = self;

在 CellWithTextFieldViewController.m

于 2014-04-28T09:16:09.817 回答
0

我的项目中也遇到过这个问题。

试试这个:

禁用 Tableview 中的滚动属性并创建一个滚动视图。然后在滚动视图中添加您的 Tableview。

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 回答