gpt4 book ai didi

ios - 如果一个文本字段已添加到单元格,如何不创建新的文本字段

转载 作者:行者123 更新时间:2023-11-28 22:30:40 25 4
gpt4 key购买 nike

我正在使用以下代码在 UITableView 单元格中创建文本字段:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.showsReorderControl = YES;
}

if (indexPath.row == 1)
{
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(15,10,260,40)];
textField.placeholder = @"Activity 1: Type Name";
textField.delegate = self;
textField.clearButtonMode = YES;
[textField setReturnKeyType:UIReturnKeyDone];
[cell addSubview:textField];
}

return cell;

我正在以完全相同的方式创建 3 个文本字段。唯一的区别是占位符文本。

当键盘弹出时, View 向上滚动,textField 1 离开屏幕。返回后,我认为正在重新创建 textField。

下面是一些屏幕截图:

单元格的第一次出现(看起来很棒):

enter image description here

滚出屏幕后返回(注意第一个文本字段): enter image description here

在第一个单元格中,当我开始输入时,第二个创建的 textField 的 placeHolder 消失了,但第一个 textField 的 Placeholder 仍然存在:

enter image description here

两个问题:

  1. 如何避免在单元格中重新创建 textField?或消除这个问题?
  2. 重新创建时,为什么单元格 3 中占位符为“事件 3:类型名称”的文本字段出现在单元格一文本字段上?

最佳答案

我假设这段代码在 cellForRow tableview dataSource 协议(protocol)方法中。问题是此方法被多次调用(有时是您意想不到的),导致创建新的文本字段并将其添加到同一单元格。为了解决这个问题,您只需要在创建单元格时添加一个文本字段,然后在每次调用该方法时配置单元格。我建议创建一个表格单元格子类,但您可以出于学习目的将代码更改为此:

#define kTextFieldTag 1

UITextField* textField = [cell viewWithTag:kTextFieldTag];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell.showsReorderControl = YES;

/* only called when cell is created */
textField = [[UITextField alloc] initWithFrame:CGRectMake(15,10,260,40)];
textField.delegate = self;
textField.clearButtonMode = YES;
textField.tag = kTextFieldTag; /* I would recommend a cell subclass with a textfield member over the tag method in real code*/
[textField setReturnKeyType:UIReturnKeyDone];
[cell addSubview:textField];
}

/* called whenever cell content needs to be updated */
if (indexPath.row == 1)
{
textField.placeholder = @"Activity 1: Type Name";
}
...
/* or replace if checks with with: */
textField.placeholder = [NSString stringWithFormat:@"Activity %i: Type Name", (int)indexPath.row]; /* Handles all fields :) */
...

关于ios - 如果一个文本字段已添加到单元格,如何不创建新的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com