如何解决此覆盖 UITextField 值?

Posted

技术标签:

【中文标题】如何解决此覆盖 UITextField 值?【英文标题】:How to solve this override UITextField values? 【发布时间】:2016-02-11 08:08:14 【问题描述】:

我创建了 ios 新应用。 UITextField 被添加到UITableView 的每一行中。第一行UITextField 输入值然后添加新行第一行UITextField 值显示在第二行UITextField。如何解决这个问题。请帮我 。提前致谢。

这是我添加行功能的示例代码

- (IBAction)btnAddRow:(id)sender 
    [self loadData:[self.dataArray count]];

    [self.tblview reloadData];


-(void ) loadData:(NSInteger) Indexvalue

    newSheet = [NSDictionary dictionaryWithObjectsAndKeys:strEntryID,entryID, nil];
    [self.dataArray insertObject:newSheet atIndex:Indexvalue];    

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
       
        UITextField *txtComment =  [[UITextField alloc] initWithFrame:CGRectMake(225.0f,5.0f,50.0f,20.0f)];
        [txtComment setBorderStyle:UITextBorderStyleLine];
        [cell addSubview:txtComment];
        [txtComment setTag:indexPath.row];
        [txtComment addTarget:self action:@selector(txtCommentChange:) forControlEvents:UIControlEventEditingChanged]; 
     return cell;

【问题讨论】:

请使用更具体的问题标题,并准确解释您的问题。 你在哪里设置文本字段的值? 【参考方案1】:
- (IBAction)btnAddRow:(id)sender 
    [self loadData:[self.dataArray count]];

    [self.tblview reloadData];


-(void ) loadData:(NSInteger) Indexvalue

    newSheet = [NSDictionary dictionaryWithObjectsAndKeys:strEntryID,entryID, nil];
    [self.dataArray insertObject:newSheet atIndex:Indexvalue];    


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
       
    for (UIView *view in cell.subviews) 
            if ([view isKindOfClass:[UITextField class]]) 
                [view removeFromSuperview];
            
        

        UITextField *txtComment =  [[UITextField alloc] initWithFrame:CGRectMake(225.0f,5.0f,50.0f,20.0f)];
        [txtComment setBorderStyle:UITextBorderStyleLine];
        [cell addSubview:txtComment];
        [txtComment setTag:indexPath.row];
        [txtComment addTarget:self action:@selector(txtCommentChange:) forControlEvents:UIControlEventEditingChanged]; 
     return cell;

在分配单元格后只编写一个 for 循环。

【讨论】:

【参考方案2】:

txtComment.text = yourText

你错过了

【讨论】:

【参考方案3】:

每次调用 cellForRowAtIndexPath 时,您都会添加一个新的 UITextField。滚动时会重复使用单元格,因此想象一下,当一个单元格离开屏幕顶部时,它会迅速被取出并放在屏幕底部,成为正在出现的新单元格。这也意味着,如果您第一次添加了一个文本字段,那么第二个将被添加到第一个之上。

如果您在初始化单元格的同一 if 语句中添加 UITextField,这将防止出现多个文本字段。例如:

if (cell == nil) 
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  
    UITextField *txtComment =  [[UITextField alloc] initWithFrame:CGRectMake(225.0f,5.0f,50.0f,20.0f)];
    [txtComment setBorderStyle:UITextBorderStyleLine];
    [cell addSubview:txtComment];
    [txtComment setTag:indexPath.row];
    [txtComment addTarget:self action:@selector(txtCommentChange:) forControlEvents:UIControlEventEditingChanged];

还有一种方法可以在细胞即将被回收时调用:-prepareForReuse。这是在 UITableViewCell 本身上调用的,因此您需要 UITableViewCell 的子类来访问它。

- (void) prepareForReuse 
    //set text fields to @"" for eg

【讨论】:

以上是关于如何解决此覆盖 UITextField 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试键盘是不是覆盖 UITableView 中的 UITextField?

UITextField如何删除强密码覆盖

如何在UITextField中仅为UIControlEvent.allEditingEvents覆盖addTarget?

解压缩文件夹时如何让文件自动覆盖现有文件?

当用户按下其他控件/空格时,如何取消对UITextField的聚焦?

如何区分 UITableView 中的 UITextField?