UITableView出列没有按预期工作

时间:2012-10-07 16:07:36

标签: uitableview

当我向下滚动列表时,所有行都在那里,但是它们在可见帧上显示的越多,它们就会继续添加更多的子视图

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *reuse = @"RuleCell";

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuse];

if (cell == nil){
    cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:reuse];
}
NSUInteger row = indexPath.row;
[self createCell: cell onRow: row];
return cell;
}

 - (void) createCell: (UITableViewCell*)cell onRow: (NSUInteger)row
{
UIImageView* bgImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell_background_spade_active.png"]];
cell.backgroundView = bgImage;
cell.textLabel.hidden = YES;

UILabel* titleLabel = [[UILabel alloc] initWithFrame: CGRectMake(100, CGRectGetHeight(cell.frame) / 2, 200, 50)];
titleLabel.text = [[self.ruleList objectAtIndex: row] objectForKey: TitleKey];
titleLabel.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview: titleLabel];
}

1 个答案:

答案 0 :(得分:1)

我认为您需要仅在代码的createCell:段内执行if (cell == nil){中的几乎所有逻辑。应该在您当前正在调用createCell:的位置执行的部分只是获取对titleLabel的引用并设置其文本值。

澄清一下,这是我建议的那种修改(未经过测试,但应该给出正确的想法):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *reuse = @"RuleCell";

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuse];

    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:reuse];
        [self setUpCell: cell];
    }
    NSUInteger row = indexPath.row;
    UILabel *titleLabel = (UILabel *)[cell.contentView viewWithTag:42];
    titleLabel.text = [[self.ruleList objectAtIndex: row] objectForKey: TitleKey];
    return cell;
}

- (void) setUpCell: (UITableViewCell*)cell
{
    UIImageView* bgImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell_background_spade_active.png"]];
    cell.backgroundView = bgImage;
    cell.textLabel.hidden = YES;

    UILabel* titleLabel = [[UILabel alloc] initWithFrame: CGRectMake(100, CGRectGetHeight(cell.frame) / 2, 200, 50)];
    titleLabel.tag = 42;
    titleLabel.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview: titleLabel];
}