我们可以在UITableview中为Section设置背景图像吗?

时间:2013-02-08 12:38:55

标签: cocoa-touch uitableview

enter image description here我们可以为UITableView部分设置背景图片,例如UITableViewCell backGroundView。根据我的研究,它是不可能的&我们需要自定义它的部分行。
除此之外,我们能够获得更好的解决方案。

提前致谢!

6 个答案:

答案 0 :(得分:2)

如果有人仍然感兴趣,实际上有一个很好的直接解决方案。 UITableView将使用选择器rectForSection告诉您每个部分的帧:

将背景图像添加到每个部分将看起来像这样(在视图控制器中的某处):

  for(int i = 0;i < [self numberOfSectionsInTableView:self.tableView]; i++) {
        UIImage *img = [[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(30.0, 30.0, 40.0, 40.0) ]; //In this example the image is stretchable
        UIView *borderView = [[UIImageView alloc] initWithImage:img];
        CGRect section_rect = [self.tableView rectForSection:i];
        borderView.frame = section_rect;
        [self.tableView addSubview:borderView];
    }

请记住,如果你在tableview中重新加载数据,你也必须重做它。

答案 1 :(得分:1)

是的,我通过以下方式做到这一点,我认为它对你也有用,....

        -(void)addBackgroundViewForSectionIndex:(int)tagIndex {

           for (UIView * subview in tableView.subviews) {
             if(subview.tag == tagIndex)
               [subview removeFromSuperview];
           }

          CGRect sectionFrame = [tableView rectForSection:tagIndex];
          UIImageView *newView = [[UIImageView alloc]initWithFrame:sectionFrame];
          newView.tag = tagIndex;
          [newView setImage:[UIImage imageNamed:@"image.PNG"]];
          [tableView addSubview:newView];
          [tableView sendSubviewToBack:newView];

        }

      // Customize the appearance of table view cells.

       - (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:      (NSIndexPath *)indexPath {

           static NSString *CellIdentifier = @"Cell";

         UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];
          if (cell == nil) {
                  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
                           }

                 cell.textLabel.text = [collection objectAtIndex:indexPath.row];


             [self addBackgroundViewForSectionIndex:indexPath.section];

                return cell;
             }

如果有任何问题,请告诉我,......:)

答案 2 :(得分:1)

不,使用UITableView是不可能的。正如其他人所建议的那样,节标题不起作用,因为它们只有在标题可见时才可见。一旦它向上滚动消失,背景图像就会消失。

您的两个选择是:

  • 直接将UIImageView实例作为子视图添加到表视图中。没有趣,因为你必须手动调整尺寸和位置,这很难做到。
  • 使用UICollectionView,它支持装饰视图(正是您要查找的内容)。

UICollectionView方法可能更好,但说实话,任何一种选择都需要大量的工作。

答案 3 :(得分:0)

Jesper的answer的5个基本实现。

for sectionIndex in 0..<tableView.numberOfSections {
    let backgroundView = UIView() // replace UIView with anything else you want, whether it was UIImage, nibView, etc...
    backgroundView.frame = tableView.rect(forSection: sectionIndex)
    tableView.addSubview(backgroundView)
}

答案 4 :(得分:-1)

您可以为TableView的部分设置背景。

查看委托方法如下:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{
    UIImageView *bgImgView = [[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,tableView.bounds.size.width,40.0)] autorelease];
    bgImgView.image = [UIImage imageNamed:@"yourimage.jpg"];

    return bgImgView;
}

希望这会对你有所帮助。

干杯!

答案 5 :(得分:-1)

table= [[UITableView alloc] initWithFrame:CGRectMake(7,0, 307, 124) style:UITableViewStylePlain];

[table  setSeparatorStyle:UITableViewCellSeparatorStyleNone];

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tablebg_pt12.png"]];

imageView.frame=CGRectMake(0, 0, 307, 124);

imageView.image= [UIImage  imageNamed:@"tablebg_pt12.png" ];


    table.backgroundView = imageView;
    [imageView release];


    table.delegate = self;
    table.dataSource = self;

    // table.backgroundColor=[UIColor clearColor];
    [viewTable addSubview:table];