如何正确设置分组TableView的背景图像?

时间:2013-04-10 09:49:08

标签: objective-c uitableview

我是iPhone开发的新手。

我知道可能有与我的问题有关的答案,但没有人帮助过我。

根据标题我有UITableView的样式分组。 我想设置背景图片,但我无法正确设置。

但问题在于我的截图中的描述。

enter image description here

我想显示仅cells UITableView self.tblView = [[UITableView alloc]initWithFrame:CGRectMake(0, 125, 320, 320) style:UITableViewStyleGrouped]; UIImageView *bgTableImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, 320, 320)]; bgTableImageView.image = [UIImage imageNamed:@"bgImage.png"]; self.tblView.backgroundColor=[UIColor clearColor]; [self.tblView setBackgroundView:bgTableImageView]; //self.tblView.backgroundView = nil; // self.tblView.opaque = NO; //self.tblView.bounces = NO; //self.tblView.scrollEnabled = YES; self.tblView.delegate=self; self.tblView.dataSource=self; self.tblView.separatorColor = [UIColor darkGrayColor]; self.tblView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; [self.view addSubview:self.tblView]; 描述的图像视图区域(已分组

这是我的代码:

UITableViewStyleGrouped

所有其他工作正常且正确,我只有如何设置{{1}}的背景图片的问题?

7 个答案:

答案 0 :(得分:4)

试试这个:

UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 277, 58)];
av.backgroundColor = [UIColor clearColor];
av.opaque = NO;
av.image = [UIImage imageNamed:@"categorytab1.png"];
cell.backgroundView = av;

答案 1 :(得分:3)

使用以下代码insatnd of use UIImageView

self.tblView.backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]];

,否则

self.tblView.backgroundView.inputView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tblbg.png"]];

第二个选项当{strong>不依赖 UITableView样式)时,此选项很有用

1)更改UITableView样式,style:UITableViewStylePlain    2)添加#import <QuartzCore/QuartzCore.h>框架
   3)更改UITableView的框架,例如CGRectMake(10, "asYouNeed", 300, "asYouNeed")    4)给出UITableView的圆角半径

self.tblView.layer.cornerRadius = 10; // set Radius as you need

并将UIImageView设为BackGroundView的{​​{1}}。 (按照您在本课题中提出的代码

使用圆角创建上述步骤UITableView我提及这里使用此代码时,如果您不依赖UITableView样式,如果UITableView对您很重要,那么此选项对您没有帮助。

谢谢:)

答案 2 :(得分:3)

首先,了解表格的工作原理:

  1. UITableView有背景资料。这就是你在细胞背后看到的。
  2. 每个单元格都有三种特殊视图:contentViewbackgroundViewselectedBackgroundView
  3. backgroundView显示在单元格的内容下,选中单元格后,将使用selectedBackgroundView
  4. 通常,您的所有内容都应转到contentsView。背景与内容的分离使得表能够有效地动画未选择/选择的过渡。单元格进入编辑模式时也很重要 - 内容被缩小/移动,编辑控件(例如删除按钮或单元格选择)可以独立显示在内容上。
  5. 单元格还直接包含分隔符视图(通常在单元格底部有1或2px高视图,具体取决于separatorStyle)。这就是为什么单元格总是比contentsView高出至少1 px。
  6. 其次,关于分组表如何工作的一些信息。

    1. 该表具有特殊的默认背景。您可以使用backgroundViewbackgroundColor
    2. 删除/更改它
    3. 分组表视图中的单元格具有较小的contentView。单元格仍然与整个表格具有相同的宽度,但contentView在左侧和右侧有一个偏移量(iPhone上大约10个点)。
    4. backgroundView已修改,并包含绘制边框的图层,具体取决于单元格位置(第一个,最后一个和中间单元格不同)。边框的颜色由表格separatorColor
    5. 指定

      可以在代码中修改所有内容!

      如何删除边框的最简单方法之一是将separatorColor设置为[UIColor clearColor]。这将删除单元格分隔符,但您可以添加自己的分隔符,例如

      cell = ...
      UIView* separator = [[UIView alloc] init];
      separator.backgroundColor = ...
      separator.frame = CGRectMake(0.0f, table.bounds.size.width, table.rowHeight - 1.0f, 1.0f);
      separator.autoresizingMask = (UIViewAutoresizingMaskFlexibleTopMargin | UIViewAutoresizingMaskFlexibleWidth);
      [cell addSubview:separator]; //note we are adding it directly to the cell, not to contentsView
      

      您也可以使用图像(UIImageView)作为分隔符,而不是单色视图。

      另一种方法是为每个单元格设置backgroundViewnil

      实际上,您可以完全忽略contentsView并直接将所有内容添加到单元格中。然后,您可以自定义以下单元格方法,以便在状态发生变化时更新单元格。

      - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
          //update the cell text colors, backgrounds etc for the selected/not selected state
          //you don't have to call super
          // (the default implementation changes between backgroundView and selectedBackgroundView)
      }
      
      - (void)setHighlighted:(BOOL)highlited animated:(BOOL)animated {
          //update the cell text colors, backgrounds etc for the selected/not highlighted state
          //you don't have to call super
          // (the default implementation changes between backgroundView and selectedBackgroundView)
          //by giving empty implementation, you will block highlighting of cells
      }
      
      - (void)setEditing:(BOOL)highlited animated:(BOOL)animated {
        //you can use this method to add custom editing controls
      }
      
      - (void)willTransitionToState:(UITableViewCellStateMask)state {
        //use this method to change the layout of your contents
        //when the cells goes into one of the editing states
      }
      
      - (void)layoutSubviews {
        //update the frames of cell contents to match the new cell size
        //note that the cell doesn't have the correct size until it is added to the table,
        //this method is called when the cell already has the final size
      
        //you can also use this method to change the size/position of the `contentsView`
      }
      

      修改: 为了解决您的具体问题,最好的解决方案可能是:

      1. 从表格中移除默认backgroundView并补充您自己的背景(例如,清晰的颜色,白色,从图案创建的颜色或UIImageViewbackgroundView
      2. 从每个单元格中删除默认backgroundView,并将其替换为UIImageView。第一个,最后一个和中间的单元格需要三个特殊图像。

答案 3 :(得分:3)

如果您想制作自定义单元格用户界面,请尝试使用

 _tblNews.backgroundColor = [UIColor clearColor];
        _tblNews.backgroundView = nil;
        _tblNews.separatorColor = [UIColor clearColor];
        _tblNews.separatorStyle = UITableViewCellSeparatorStyleNone;

为您的单元格创建nib,因为您想要创建单元格并在数据源方法中加载该单元格。

for load xib

+ (id)loadNibNamed:(NSString *)NibName {
    NSObject *cl = nil;
    if (NSClassFromString(NibName) != nil) {
        NSArray *arr = [[NSBundle mainBundle] loadNibNamed:NibName owner:self options:nil];
        for (id cls in arr) {
            if([cls isKindOfClass:NSClassFromString(NibName)])
            {
                cl = cls;
                break;
            }
        }
    }
    return cl;
}

在xib中确保为单元格的可重用性设置标识符。 使用它你可以轻松地定制单元格布局。

答案 4 :(得分:2)

UITableView背景视图设为 nil ,使其透明。

[tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"backgroundImage.png"]]];
tableView.opaque = NO;
tableView.backgroundView = nil;

希望它能帮到你。

答案 5 :(得分:2)

你想这样吗

enter image description here

以下是代码: -

在任何地方设置UITableView的背景视图。我已经在viewDidload中完成了它。

[_tblView setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"url.jpg"]]];

并在cellForRowAtIndexPath

中将tableViewCellBackground颜色设置为透明
    static NSString *cellIdentifier=@"cellIdentifier";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell ==nil) {
    cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.backgroundColor=[UIColor clearColor];
cell.textLabel.text=@"goup styled";
return cell;

答案 6 :(得分:1)

请试试这个,

UIView *backgroundView = [[UIView alloc] init];
[backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]];

并在tableview中,请设置此属性。

UITableView *tableView = [[UITableView alloc] init];
[tableView setBackgroundView:backgroundView];

希望这适合你。