tableview单元格内的ios文本字段
Posted
技术标签:
【中文标题】tableview单元格内的ios文本字段【英文标题】:ios textfield inside tableview cell 【发布时间】:2015-12-03 17:09:10 【问题描述】:我在 2 个单元格中创建了 2 个文本字段。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell;
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
if (indexPath.row == 0)
[self CustomTextField:cell :txtFirstName];
txtFirstName.text = [_dictInfoOneUser objectForKey:@"firstname"];
[cell addSubview:txtFirstName];
txtFirstName.tag = 100;
else (indexPath.row == 1)
[self CustomTextField:cell :txtLastName];
txtLastName.text = [_dictInfoOneUser objectForKey:@"lastname"];
[cell addSubview:txtLastName];
txtLastName.tag = 101;
我想我设置了txtFirstName.text = [_dictInfoOneUser objectForKey:@"firstname"];
。我编辑了单元格名字,然后滚动,刷新单元格并重置我在文本字段中编辑的内容。
我该如何解决这个问题。
************已编辑
-(void)CustomTextField :(UITableViewCell *)cell :(UITextField *)textField
//add bottom border
CALayer *border = [CALayer layer];
border.borderColor = [UIColor grayColor].CGColor;
border.frame = CGRectMake(cell.frame.size.width / 2 - 160, textField.frame.size.height - 1, textField.frame.size.width, textField.frame.size.height);
border.borderWidth = 1;
[textField.layer addSublayer:border];
textField.layer.masksToBounds = YES;
[textField setTextAlignment:NSTextAlignmentCenter];
【问题讨论】:
您保存编辑的信息了吗?如果没有 - 比你的单元格中只有“默认”文本。 也许将编辑的文本保存在 NSMutableArray 中(每次进行编辑时删除并添加)并使用这个可变数组来填充单元格。滚动时重新加载表格视图。 你能编辑我的代码吗? 为您的CustomTextField
添加代码
分配文本字段的方式很奇怪。它们应该与单元格一起创建。
【参考方案1】:
看来你一开始并没有对你的细胞进行出队,这就是你的
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
应该看起来像:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
...
【讨论】:
deque
-ing 是初始化单元格的现代方法,但不是导致 OP 问题的原因。 OP正在获取一个单元格。如果没有,问题将是关于异常,而不是单元格内容显示不正确。【参考方案2】:
这是由于细胞重复使用造成的。要遵循的模式是有条件地构建子视图(因此每个单元格只能获得一个),但无条件地配置它们。像这样……
if (indexPath.row == 0)
UITextField *txtFirstName = (UITextField *)[cell viewWithTag:100];
if (!txtFirstName)
// it doesn't exist. build it
[self CustomTextField:cell :txtFirstName]; // not sure what this does, assuming it's part of building it
[cell addSubview:txtFirstName];
txtFirstName.tag = 100;
// whether it was just built or not, give it a value
txtFirstName.text = [_dictInfoOneUser objectForKey:@"firstname"];
// same idea for the other row/textfield
【讨论】:
很抱歉。不过,这种方法是正确的。我认为问题与 CustomTextField 字段方法有关。请将该代码添加到您的问题中以上是关于tableview单元格内的ios文本字段的主要内容,如果未能解决你的问题,请参考以下文章