addSubView在UITableView上无法正常工作

时间:2013-03-25 12:26:31

标签: objective-c uitableview

此代码应在单元格上划一条线:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (nil==cell){
        cell = [[UITableViewCell alloc]
                                 initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:currentCourseName];
    NSLog(currentCourseName);
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font];
    CGFloat y = cell.contentView.frame.size.height / 2;

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)];
    line.backgroundColor = [UIColor redColor];
    [cell.textLabel addSubview:line];

    return cell;

}

但似乎我必须多次滚动才能看到红线。 enter image description here

3 个答案:

答案 0 :(得分:2)

我在你的代码中看到了两个问题。

第一

CGFloat y = cell.contentView.frame.size.height / 2;

创建单元格时frame的{​​{1}}是多少?如果要将子视图添加到标签,请使用标签的高度。

contentView

第二

CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5, cell.textLabel.bounds.size.height / 2.0f - 1.5f, size.width, 3)]; line.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);

如果重复使用单元格,则在已有行时向单元格添加行。首先检查[cell.textLabel addSubview:line];子视图是否计数。

textLabel

答案 1 :(得分:1)

我认为您添加的视图,而不是在您的(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath mehod中添加,请尝试使用自定义单元格概念。这解决了我UITableView

中的这个问题

Creating a custom Table View Cell programmatically

Custom Table View Cells in iPad Programming

答案 2 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (nil==cell){
        cell = [[UITableViewCell alloc]
                                 initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

     NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:currentCourseName];
    NSLog(currentCourseName);
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font];
    CGFloat y = cell.contentView.frame.size.height / 2;

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)];
    line.backgroundColor = [UIColor redColor];
    [cell.contentView addSubview:line];

    }



    return cell;

}