具有文本字段的 uitableview 中的滚动问题

Posted

技术标签:

【中文标题】具有文本字段的 uitableview 中的滚动问题【英文标题】:Scrolling issue in uitableview having textfields 【发布时间】:2012-07-30 10:27:09 【问题描述】:

我有一个包含多个部分的UItableview,每个部分有两行包含标签和文本字段。滚动数据时,文本字段会改变其位置。

[1]:UITableView scrolling issue这个问题和我的问题类似,但我无法得到确切的解决方案。

这是我的数据源,即 cellForAtIndexPath 方法。

static NSString *CellIdentifier = @"Cell";

UILabel *   mainLabel;    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];        
    cell.accessoryType = UITableViewCellAccessoryNone;        
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(20.0, 8.0, 100.0, 30.0)] autorelease];
    mainLabel.tag = MAINLABEL_TAG;
    mainLabel.font = [UIFont systemFontOfSize:17.0];
    mainLabel.textColor = [UIColor blackColor];
    mainLabel.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview:mainLabel];
    mainTF = [[[UITextField alloc]initWithFrame:CGRectMake(150, 8.0, 140.0, 30)] autorelease];
    mainTF.tag = MAINTEXTFIELD_TAG;
    mainTF.font = [UIFont systemFontOfSize:17.0];
    mainTF.textColor = [UIColor blackColor];
    mainTF.backgroundColor = [UIColor clearColor];
    mainTF.borderStyle = UITextBorderStyleRoundedRect;
    mainTF.delegate = self;
    mainTF.autocorrectionType = UITextAutocorrectionTypeNo;
    mainTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
    mainTF.returnKeyType = UIReturnKeyDone;
    mainTF.clearButtonMode = UITextFieldViewModeWhileEditing;
    mainTF.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    [cell.contentView addSubview:mainTF];

else
    mainLabel = (UILabel *)[cell.contentView viewWithTag:MAINLABEL_TAG];
    mainTF = (UITextField *)[cell.contentView viewWithTag:MAINTEXTFIELD_TAG];


if (indexPath.row == 0) 
    mainLabel.text = @"Quantity";
    //mainTF.text =@"1";

else
    mainLabel.text = @"Unit";
    //mainTF.text = @"100 grams";


// Configure the cell...
return cell;

【问题讨论】:

【参考方案1】:

如果您将单元格出列,它们将包含之前放入其中的数据。您应该在每次加载单元格时将 textfield.text 初始化为 @""。

【讨论】:

你能详细说明一下吗?我找不到你? 如果你: UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];如果它返回一个单元格,则该单元格将包含第一次使用时放入的所有数据 我对编程很陌生。所以请告诉那行代码有什么问题。以及我应该在这段代码中做什么。 您应该简单地取消注释 mainTF.text 并将其设置为 mainTF.text = @"" 是的,我明白,如果您想保留数据,您需要创建 5x2 = 10 个不同的文本字段。您可以在循环中执行此操作并将文本字段添加到数组中,并使用它们在数组中的索引引用您的文本字段,然后将它们添加为单元格的子视图。因此 [cell.contentView addsubView:[arrayOfTextFields objectAtIndex:index]];或者您继续执行您所做的操作,并在文本字段委托中将字符串存储在一个数组中,然后将相应的字符串重新分配给单元格文本字段。无论如何,我不确定您是否有一个好的实现,也许您应该重新考虑您的单元格。

以上是关于具有文本字段的 uitableview 中的滚动问题的主要内容,如果未能解决你的问题,请参考以下文章

具有文本字段滚动问题的 iOS 表格视图

使 UIViewController 中的 UITableView 滚动到文本字段

具有多行输入字段的 UITableViewCell?

自定义tableviewcell中的文本字段在滚动时离开单元格

当文本字段开始编辑时停止 UITableView 滚动

带有文本字段的 UiTableView - 出现键盘时滚动