2012-03-10 64 views
1

是否有任何可能的方法将UIImageView设置为分组UITableView中的部分的背景(比方说第3节)? 我不是在问关于viewForHeaderInSection'因为我尝试过但没有按预期工作。 非常感谢...将ImageView设置为分组的uitableview中的部分的背景

+0

当你说某个部分的“背景”时,这是否意味着你要在一个部分中设置单元格的背景,或者在部分后面设置tableview的背景? – isaac 2012-03-10 14:47:45

+0

第二个.. – JAHelia 2012-03-10 14:52:27

回答

0

如果您的表只有一个部分使用myTable.tableHeaderView = customHeaderView

viewForHeaderInSection如果您没有返回类型为UIView的对象或您的方法中的子类,则可能无法工作。将viewForHeaderInSection方法中的一些代码添加到您的问题中,以获得更准确的答案。

编辑 -如果viewForHeaderInSection didn't work as expected,你的意思是,头球攻门被剪辑,则这可能是因为你还没有已实现了以下方法:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

如果不执行,每个部分的高度设置到iOS默认值。

+0

viewForHeaderInSection没有按预期工作(我已经更新了上面的问题文本),它返回一个uiview,但它不会像预期的那样实现。 – JAHelia 2012-03-10 15:37:00

2

我的猜测是,如果你想得非常有创意,你可以想出一个方法来实质上交换UITableView的backgroundView属性,因为不同的部分是可见的。这不会让我觉得特别优雅,因为多个部分可能一次占据可见的屏幕,但也许我不明白这个问题。

简短的回答是,没有一个定义/简单的方法来实现这一点。一个部分的组合远离UITableView的背景,实质上该体系结构没有为你想要的设置。我不会假设知道你的实现的细节,但我也要警惕:UITableView的视觉和体系结构特征是相当考虑周全的。我个人的观点(再次,我没有看到你的工作),是在不同的部分背景可能压倒在许多情况下的用户体验。如果正确执行,我还可以看到它可能是很好的UI touch。

在这种情况下,如果你仍然想这样做,这里是我采取的方法:

基本上你要注意你的tableview的单元格的位置。你可以在scrollViewDidScroll或tableViewWillDisplay单元格或其他地方做到这一点,我敢肯定。但是你需要知道哪些单元格在屏幕上和屏幕上滚动,然后你需要能够询问最上面可见的单元格是什么。一旦你确定了你应该显示的部分,你可以使用它来滚动你自己的代表每个部分背景的视图。基本上,你要在代码中创建每个动态节背景视图,只需要将UIView的背景视图设置为重复模式(显然,高度将是动态的)。将所有的节背景子视图(或者最好是懒惰地)添加到你的UITableView的backgroundView中。

现在,随着滚动视图的滚动,您将观察哪些行和部分进出了表格视图。当部分中的行滚动时,计算部分背景的高度(将部分中的行数乘以其高度),并调整它的坐标轴,但由您的tableView的backgroundView截取。当部分滚动时,您将更新相关部分背景视图的Y偏移量。唷!

另一个想法可能是折腾你的所有部分背景视图,垂直布置在UIScrollView中,禁止用户交互。将滚动视图放置在您的表视图的backgroundView中,然后找出数学实质上是从tableview的滚动视图到背景滚动视图的“前进”滚动事件。

这可能需要一些工作来找到一个实现,以保持动画的顺畅和同步,但是,这是我认为可以实现的一种方法。

+0

感谢您的解释,我的实现只是一个动态区段创建的分组表格视图(每个区段都有动态数量的单元格),每个区段都必须有一个背景图片,这将极大地增强页面的外观和感觉。 – JAHelia 2012-03-10 15:40:03

+0

没问题,祝你好运! – isaac 2012-03-10 15:55:55

+0

在答案中查看新的方法建议。 – isaac 2012-03-10 16:43:12

0

创建一个自定义headerView,看起来像这样。

.H

@interface CustomViewForHeader: UIView 
@end 

.M

#import "CustomViewForHeader.h" 
@implementation CustomViewForHeader 

-(id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 

if (self != nil) { 
    UIImageView *bgImage = [[UIImageView alloc]initWithFrame:self.frame]; 
    bgImage.image = [UIImage imageNamed:@"bill_headerBg.png"]; 
    [self addSubview:bgImage]; 
} 
return self; 
} 
@end 

这样使用它:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 50.0; 
} 

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section { 
    CustomViewForHeader *customView = [[CustomView alloc]initWithFrame:CGRectMake(0,0,320,50)] 
    return customView; 
} 
+0

此视图将只覆盖标题区域,它不会覆盖整个区域,并根据单元格数量给出区段高度的动态... – JAHelia 2012-03-11 07:26:21

0

我记得一些事情的方法来找到每个部分的矩形。有了这些,你可以将适当大小的图像放在表格视图下面的滚动视图中。

除此之外,您可以将背景图像放入单元格本身的背景中。当tableview调用给定部分的单元格时,可以选择合适的图像或图像拼贴。

相关问题