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文本字段的主要内容,如果未能解决你的问题,请参考以下文章

无法选择或编辑 Tableview 单元格内的文本字段

完成在单元格内编辑 textview 后向 tableview 添加另一个单元格

从自定义 tableView 单元格文本字段中获取数据

从表格视图单元格内的文本字段中获取文本

iOS7上tableview单元格中的文本字段崩溃

如何在ios中的tableview单元格上的文本字段上返回文本字段上的键盘