如何解决这个覆盖UITextField的值?

时间:2016-02-11 08:08:14

标签: ios objective-c uitableview uitextfield

我创建了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;
}

3 个答案:

答案 0 :(得分:0)

txtComment.text = yourText

你错过了

答案 1 :(得分:0)

每次调用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];
}

Theres也是一种可以使用的方法,当一个单元格即将被回收时调用:-prepareForReuse。这在UITableViewCell本身上调用,因此您需要UITableViewCell的子类来访问它。

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

答案 2 :(得分:0)

- (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循环。