Madhu
Madhu

Reputation: 1542

Can we set backgroundImage for Section in UITableview?

enter image description hereCan we set Background image for UITableView Section like UITableViewCell backGroundView. As per my research Its not possible & we need to customize the row like section of it.
Cane we able to get better solution apart from this.

Thanks in advance!

Upvotes: 4

Views: 4283

Answers (6)

om-ha
om-ha

Reputation: 3592

Swift 5 bare-bones implementation of Jesper's answer.

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)
}

Upvotes: 2

Dipak Chaudhari
Dipak Chaudhari

Reputation: 655

Yes, I am doing this by following way, I think it work for you also,....

        -(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;
             }

Let me know if any issue,...:)

Upvotes: 2

Jesper Schl&#228;ger
Jesper Schl&#228;ger

Reputation: 375

In case anyone are still interrested, there is actually a pretty straigt forward solution to this. UITableView will tell you the frames of each of your sections using the selector rectForSection:

Adding a backgroud image to each section would then look something like this (Somewhere in the view controller):

  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];
    }

Just remember that if you reload the data in the tableview you would have to redo this as well.

Upvotes: 4

SanjayPatel
SanjayPatel

Reputation: 21

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];

Upvotes: -1

Ash Furrow
Ash Furrow

Reputation: 12421

No, this is not possible using UITableView as it was intended. Section headers, as others have suggested, won't work because they'll only be visible while the header is visible. As soon as it disappears while scrolling up, the background image would disappear.

Your two options are:

  • Add UIImageView instances directly as subviews to the table view. Not fun, as you'll have to size and position them manually, which is kind of hard to do.
  • Use UICollectionView, which supports decoration views (exactly what you're looking for).

The UICollectionView method is probably better, but to be honest, either option would require a lot of work.

Upvotes: 1

Nishant B
Nishant B

Reputation: 2897

You can set the Background for Section of TableView.

Have a look at delegate method as below:

- (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;
}

Hope this will be helpful to you.

Cheers!

Upvotes: -1

Related Questions