当我在一个字段中输入文本时,它也会在其他一些文本字段中显示相同的文本

时间:2012-05-18 10:17:25

标签: iphone uitableview uitextfield

当我在文本字段1中输入文本时,文本也会显示在文本字段9中。

这是我在tableview单元格中创建textfield所做的一些代码。

我在tableview单元格中添加了textfield。像下面的cellforRowatintexpath方法

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

static NSString *CellIdentifier = @"myCell";
//UILabel* nameLabel = nil;
cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else
{
    UILabel *titleLbl = (UILabel *)[cell viewWithTag:1];
    [titleLbl removeFromSuperview];
}
nameLabel = [[UILabel alloc] initWithFrame:CGRectMake( 7.0, 10.0, 160.0, 44.0 )];
nameLabel.text = [labels objectAtIndex:indexPath.row];
nameLabel.font = [UIFont boldSystemFontOfSize:12]; 
nameLabel.lineBreakMode = UILineBreakModeWordWrap;
nameLabel.tag =1;
nameLabel.numberOfLines =0;
[nameLabel sizeToFit];
CGSize expectedlabelsize = [nameLabel.text sizeWithFont:nameLabel.font constrainedToSize:nameLabel.frame.size lineBreakMode:UILineBreakModeWordWrap];
CGRect newFrame =nameLabel.frame;
newFrame.size.height =expectedlabelsize.height;
[cell.contentView addSubview: nameLabel];
[nameLabel release]; 


//adding textfield to tableview cell. 
tv = [[UITextField alloc] initWithFrame:CGRectMake(nameLabel.frame.origin.x+nameLabel.frame.size.width+2, 10.0, cell.contentView.bounds.size.width, 30)];
tv.tag = indexPath.row + 2;
//tv.text =[labels objectAtIndex:indexPath.row];
tv.font = [UIFont boldSystemFontOfSize:12];


//this method will take text from textfield of tableview cell using their individual tag
[tv addTarget:self action:@selector(getTextFieldValue:) forControlEvents:UIControlEventEditingDidEnd];

[cell.contentView addSubview:tv];

[tv setDelegate:self];


[tv release];   


return cell;}

这里是方法getTextFieldValue方法

- (void) getTextFieldValue:(UITextField *)textField{ 

if (textField.tag == 2) { 

    //NSString *value1 = [NSString stringWithFormat:@"%@",textField.text];
    //NSLog(@"value1 is %@",value1);.

    NSLog(@"2--->%@",textField.text); 
}else if(textField.tag == 3){ 
    NSLog(@"3--->%@",textField.text); 
}else if(textField.tag == 4){ 
    NSLog(@"4--->%@",textField.text); 
    } 
else if(textField.tag == 5){ 
    NSLog(@"5--->%@",textField.text); 
} 
else if(textField.tag == 6){ 
    NSLog(@"6--->%@",textField.text); 
} 
else if(textField.tag == 7){ 
    NSLog(@"7--->%@",textField.text); 
} 
else if(textField.tag == 8){ 
    NSLog(@"8--->%@",textField.text); 
} 
else if(textField.tag == 9){ 
    NSLog(@"9--->%@",textField.text); 
} 
else if(textField.tag == 10){ 
    NSLog(@"10--->%@",textField.text); 
} 
else if(textField.tag == 11){ 
        NSLog(@"11--->%@",textField.text); 
} 
else if(textField.tag == 12){ 
        NSLog(@"12--->%@",textField.text); 
} }

3 个答案:

答案 0 :(得分:1)

首先,请像这样重写你的getTextFieldValue方法:

- (void)getTextFieldValue:(UITextField *)textField { 
    NSLog(@"%d--->%@", textField.tag, textField.text); 
}

您继续将UITextField添加到单元格,即使它已被重用。尝试将该代码放在if语句中。

您应该每次都将文本字段的文本设置为nil。否则它仍将存在于出列的单元格(滚动时)。

这样的事情:

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

static NSString *CellIdentifier = @"myCell";
cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake( 7.0, 10.0, 160.0, 44.0 )];
    //TODO: Set up nameLabel here
    [cell.contentView addSubview: nameLabel];
    [nameLabel release];

    UITextField *tv = [[UITextField alloc] init];
    tv.font = [UIFont boldSystemFontOfSize:12];
    [tv setDelegate:self];
    [tv addTarget:self action:@selector(getTextFieldValue:) forControlEvents:UIControlEventEditingDidEnd];
    [cell.contentView addSubview:tv];
    [tv release];
}

UILabel *nameLabel = (UILabel *)[cell viewWithTag:1];
nameLabel.text = [labels objectAtIndex:indexPath.row];
[nameLabel sizeToFit];

return cell;
}

答案 1 :(得分:0)

也许您已将一些IBOutlet设置为textField?你呢?

答案 2 :(得分:0)

那就是保留问题。

您可以为每一行采用不同的cellIdentifier。只需更改一个声明即可获得解决方案。

用上述方法解决这个问题。我面临同样的问题&我用这种方法解决了。 我希望这会对你有所帮助。

NSString *CellIdentifier = [NSString stringWithFormat:@"cellidentifier-%d",indexPath.row];