我在重新加载表时遇到了一些问题。我的cellForRowAtIndexPath
是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
int counter=indexPath.row;
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",counter];
// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
//ID
UILabel *lblID=[[UILabel alloc]init];
lblID.frame=CGRectMake(10, 15.0, 150, 30.0);
[lblID setFont:[UIFont boldSystemFontOfSize:20.0]];
[lblID setBackgroundColor:[UIColor clearColor]];
[lblID setTextColor:[UIColor blackColor]];
lblID.text = [arrID objectAtIndex:indexPath.row];
[cell.contentView addSubview:lblID];
[lblID release];
//Date
UILabel *lblName=[[UILabel alloc]init];
lblName.frame=CGRectMake(130, 15.0, 250, 30.0);
[lblName setFont:[UIFont systemFontOfSize:20.0]];
[lblName setBackgroundColor:[UIColor clearColor]];
[lblName setTextColor:[UIColor blackColor]];
lblName.text = [arrProductName objectAtIndex:indexPath.row];
[cell.contentView addSubview:lblName];
[lblName release];
//Qty
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(320, 20, 50, 30)];
[textField addTarget:self action:@selector(TextOfTextField:)
forControlEvents:UIControlEventEditingDidEnd];
textField.userInteractionEnabled = true;
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.font = [UIFont systemFontOfSize:15];
textField.text = [arrItems objectAtIndex:indexPath.row];
textField.tag = indexPath.row;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.keyboardType = UIKeyboardTypePhonePad;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textField.delegate = self;
[arrTxtItems addObject:textField];
[cell.contentView addSubview:textField];
[textField release];
//Discount
UITextField *txtDiscount = [[UITextField alloc] initWithFrame:CGRectMake(460, 20, 50, 30)];
// [txtDiscount addTarget:self action:@selector(TextOfTextField:)
// forControlEvents:UIControlEventEditingDidEnd];
txtDiscount.userInteractionEnabled = true;
txtDiscount.borderStyle = UITextBorderStyleRoundedRect;
txtDiscount.font = [UIFont systemFontOfSize:15];
txtDiscount.text = [arrDiscount objectAtIndex:indexPath.row];
txtDiscount.tag = indexPath.row;
txtDiscount.autocorrectionType = UITextAutocorrectionTypeNo;
txtDiscount.keyboardType = UIKeyboardTypePhonePad;
txtDiscount.returnKeyType = UIReturnKeyDone;
txtDiscount.clearButtonMode = UITextFieldViewModeWhileEditing;
txtDiscount.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
txtDiscount.delegate = self;
[arrTxtDiscount addObject:txtDiscount];
[cell.contentView addSubview:txtDiscount];
[txtDiscount release];
//Price
UILabel *lblPrice=[[UILabel alloc]init];
lblPrice.frame=CGRectMake(560, 15.0, 250, 30.0);
[lblPrice setFont:[UIFont boldSystemFontOfSize:20.0]];
[lblPrice setBackgroundColor:[UIColor clearColor]];
[lblPrice setTextColor:[UIColor blackColor]];
[arrLblNetPrice addObject:lblPrice];
NSString *strPrice = [arrPrice objectAtIndex:indexPath.row];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setGroupingSeparator:@"."];
[formatter setGroupingSize:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:3];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[strPrice doubleValue]]];
[formatter release];
NSLog(@"str : %@",str);
NSLog(@"strPrice : %@",strPrice);
lblPrice.text = str;
[cell.contentView addSubview:lblPrice];
[lblPrice release];
}
return cell;
}
以这种方式构造单元格有助于在滚动表格时保留textFields的值。但在某些时候,当我重新加载表控件时,不会落入 if condition ,因为该单元尚未被释放。在这种情况下我应该在哪里释放细胞?
答案 0 :(得分:1)
您需要将创建/获取单元实例与使用数据配置单元属性分开。按如下方式更改您的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
int counter=indexPath.row;
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",counter];
// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
//ID
UILabel *lblID=[[UILabel alloc]init];
lblID.frame=CGRectMake(10, 15.0, 150, 30.0);
[lblID setFont:[UIFont boldSystemFontOfSize:20.0]];
[lblID setBackgroundColor:[UIColor clearColor]];
[lblID setTextColor:[UIColor blackColor]];
lblID.tag = MyViewTagIDLabel; // make an enum to give your subviews unique tags > 0
[cell.contentView addSubview:lblID];
[lblID release];
// add the rest of your subviews
// any other cell configuration that does not change based on the ind
}
// configure the cell with data based on the indexPath
UILabel lblID = [cell.contentView viewWithTag:MyViewTagIDLabel];
lblID.text = [arrID objectAtIndex:indexPath.row];
// configure the rest of the subviews
return cell;
}