如何解决此覆盖 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中仅为UIControlEvent.allEditingEvents覆盖addTarget?