当我在文本字段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);
} }
答案 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];