我正在使用以下代码创建一个带有标签的自定义UITableViewCell。
我遇到的问题是细胞在重复使用时没有被清除,我不知道该怎么做,因为我不认为我可以在它出列时访问细胞内容。
有谁能告诉我,我该怎么做?
if (indexPath.section == 2) {
// Resetting the elements in the cell prior to use.
UIView *blankCell;
UILabel *methodText;
static NSString *methodCellIdentifier = @"Method Cell";
methodCell = [tableView dequeueReusableCellWithIdentifier: methodCellIdentifier];
if (methodCell == nil)
{
methodCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: methodCellIdentifier] autorelease];
}
blankCell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
methodText = [[UILabel alloc] initWithFrame:CGRectMake(15, 7, 305, 44)];
methodText.text = [[self.recipeDict objectForKey:@"Method"] objectAtIndex: indexPath.row];
NSLog(@"methodText.text = %@", methodText.text);
[methodText setLineBreakMode:UILineBreakModeWordWrap];
[methodText setNumberOfLines:0];
[methodText sizeToFit];
[blankCell addSubview:methodText];
[methodCell.contentView addSubview:blankCell];
[methodText release];
methodCell.contentMode = UIViewContentModeRedraw;
return methodCell;
}
答案 0 :(得分:1)
将创建子视图的代码移动到块中,以检查methodCell是否为nil。仅更新该块之外的内容。要在块外部访问它们,请在创建它们时在它们上设置标记值,并使用viewWithTag查找和更新其内容:
if (methodCell == nil)
{
methodCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: methodCellIdentifier] autorelease];
blankCell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
methodText = [[UILabel alloc] initWithFrame:CGRectMake(15, 7, 305, 44)];
[methodText setLineBreakMode:UILineBreakModeWordWrap];
[methodText setNumberOfLines:0];
[blankCell addSubview:methodText];
[methodCell.contentView addSubview:blankCell];
methodText.tag = 1;
[methodText release];
[blankCell release];
methodCell.contentMode = UIViewContentModeRedraw;
}
methodText = (UITextField*)[methodCell viewWithTag:1];
methodText.text = [[self.recipeDict objectForKey:@"Method"] objectAtIndex: indexPath.row];
NSLog(@"methodText.text = %@", methodText.text);
[methodText sizeToFit];