UILabel没有使用contentView属性显示在我的表视图单元格中

时间:2013-06-12 12:08:27

标签: ios objective-c uitableview

我遇到问题UILabels没有在我的表格视图中使用单元格的contentView属性显示。在我向细胞添加UIImage之前,UILabels显示出来了。我想将文本添加到单元格并使用cell.contenView,这样我就可以将UILAbels放在我想要的位置。

感谢您的帮助。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellReuseIdentifier = @"cellReuseIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellReuseIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellReuseIdentifier];


        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 320, 30)];

        titleLabel.tag = 234234;
        titleLabel.backgroundColor = [UIColor clearColor];

        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel setFont:[UIFont fontWithName:@"DIN" size:24]];
        titleLabel.layer.shadowColor = [[UIColor whiteColor] CGColor];
        titleLabel.layer.shadowOpacity = 0.7;
        titleLabel.layer.shouldRasterize=YES;

        [cell.contentView addSubview:titleLabel];

        UILabel *detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, cell.bounds.size.width, 30)];

        detailLabel.tag = 345345;
        detailLabel.backgroundColor = [UIColor clearColor];

        detailLabel.textColor = [UIColor whiteColor];
        [detailLabel setFont:[UIFont fontWithName:@"DIN" size:18]];
        detailLabel.layer.shadowColor = [[UIColor whiteColor] CGColor];
        detailLabel.layer.shadowOpacity = 0.7;
        detailLabel.layer.shouldRasterize=YES;

        [cell.contentView addSubview:detailLabel];

    }


    UILabel *titleLabel = (UILabel *)[cell viewWithTag:234234];
    titleLabel.text = (NSString *)[[publicDataArray objectAtIndex:indexPath.row] objectForKey:@"title"];

    UILabel *detailLabel = (UILabel *)[cell viewWithTag:345345];
    detailLabel.text = (NSString *)[[publicDataArray objectAtIndex:indexPath.row] objectForKey:@"description"];


    NSString *imageUrlString = [NSString stringWithFormat:@"%@", [[publicDataArray objectAtIndex:indexPath.row] objectForKey:@"image"]];
    UIImage *cachedImage = [self.imageCache objectForKey:imageUrlString];
    if (cachedImage)
    {
        cell.imageView.image = cachedImage;
    }
    else
    {

        cell.imageView.image = [UIImage imageNamed:@"rest.jpg"]; // initialize the image with blank image as a placeholder

        // download in the image in the background

        [self.imageDownloadingQueue addOperationWithBlock:^{

            NSURL *imageUrl   = [NSURL URLWithString:imageUrlString];
            NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
            UIImage *image    = nil;
            if (imageData)
                image = [UIImage imageWithData:imageData];

            if (image)
            {

                [self.imageCache setObject:image forKey:imageUrlString]; // add the image to your cache

                // finally, update the user interface in the main queue

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                    // make sure the cell is still visible

                    UITableViewCell *updateCell = [tableView cellForRowAtIndexPath:indexPath];
                    if (updateCell)
                        cell.imageView.image = image;
                }];
            }
        }];
    }

    return cell;
}

另外,当我添加cell.textLabel.text = [[publicDataArray objectAtIndex:indexPath.row] objectForKey:@"title"];时 而不是使用contentView,单元格文本显示在右侧。

enter image description here

1 个答案:

答案 0 :(得分:2)

你刚刚在这里犯了一个愚蠢的错误:

detailLabel.textColor = [UIColor whiteColor];

您是否尝试在白色背景上显示白色字体?

我刚刚测试了你的代码,如下所示:

UILabel *titleLabel;
UILabel *detailLabel;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellReuseIdentifier = @"cellReuseIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellReuseIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellReuseIdentifier];


        titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 320, 30)];

        titleLabel.tag = 234234;
        titleLabel.backgroundColor = [UIColor clearColor];

        titleLabel.textColor = [UIColor blackColor];
         [titleLabel setFont:[UIFont boldSystemFontOfSize:15]];
        titleLabel.layer.shadowColor = [[UIColor whiteColor] CGColor];
        titleLabel.layer.shadowOpacity = 0.7;
        titleLabel.layer.shouldRasterize=YES;


        [cell.contentView addSubview:titleLabel];

        detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, cell.bounds.size.width, 30)];

        detailLabel.tag = 345345;
        detailLabel.backgroundColor = [UIColor clearColor];

        detailLabel.textColor = [UIColor blackColor];
        [detailLabel setFont:[UIFont boldSystemFontOfSize:15]];
        detailLabel.layer.shadowColor = [[UIColor whiteColor] CGColor];
        detailLabel.layer.shadowOpacity = 0.7;
        detailLabel.layer.shouldRasterize=YES;
           [cell.contentView addSubview:detailLabel];


      [cell.contentView bringSubviewToFront:titleLabel];
      [cell.contentView bringSubviewToFront:detailLabel];


         }



    detailLabel = (UILabel *)[cell viewWithTag:345345];
    detailLabel.text = [_objects objectAtIndex:indexPath.row];


    titleLabel = (UILabel *)[cell viewWithTag:234234];
    titleLabel.text = [_objects objectAtIndex:indexPath.row];


   return cell;
}

修改

要将创建的标签带到图片视图上方,您只需添加以下两行:

[cell.contentView bringSubviewToFront:titleLabel];
[cell.contentView bringSubviewToFront:detailLabel];

另外,添加图像内容View如下所示:

imgView = [[UIImageView alloc] initWithFrame:CGRectMake(40, 20, 40 ,40)];
imgView.image = [UIImage imageNamed:@"img.png"];
[cell.contentView addSubview:imgvie];

截图:

enter image description here