自定义表格单元格的uitextfield

Posted

技术标签:

【中文标题】自定义表格单元格的uitextfield【英文标题】:uitextfield of custom table cell 【发布时间】:2013-01-29 11:58:14 【问题描述】:

我正在创建一个包含三种不同类型的自定义单元格的表格,其中一个自定义单元格具有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;
     

有人知道这个问题吗?

【问题讨论】:

【参考方案1】:

您有不同类型的单元格,因此您需要为每个单元格使用不同的单元格标识符。

试试这个:

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

使用此代码,每个 cellIdentifier 将是 1,2,3,4...(都不同)

我很确定它会解决问题

【讨论】:

【参考方案2】:

在创建 UITableView 之前创建 UITextField 并在单元格内容视图中添加您的 Textfield 对象

[cell.contentView addSubview:yourTxtFieldOblect];

【讨论】:

是的.. 我这样做了但仍然崩溃 创建一个自定义方法并在创建UITableView之前放置UITextField的初始化代码和该方法调用(只放置初始化代码不添加)并将其添加到单元格内容视图...试试看..可能会解决你的问题:)【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

试试这个:

禁用 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];

【讨论】:

【参考方案6】:

试试这个

     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;

【讨论】:

【参考方案7】:

在滚动 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;

【讨论】:

【参考方案8】:

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

  textfield.deleagate = self;

在 CellWithTextFieldViewController.m 中

【讨论】:

以上是关于自定义表格单元格的uitextfield的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

当我在 SE 中向上滚动时,自定义 UITableViewCell 中的 UItextfield 文本打印为零

自定义单元格的“没有重复使用表格单元格的索引路径”问题

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

如何动态更改自定义单元格的表格视图单元格的高度?

带有自定义表格视图单元格的表格视图在滚动时消失