将自定义视图放入UITableView

我有一个常规样式的UITableView – 具有白色背景和灰色水平线来分隔行的那个。

我有另一个自定义UIView,只是一个100X100矩形填充redColor。

我怎样才能把后者放到前者中,使其出现水平线上,但仍然是桌面视图的“部分”,因为当我滚动桌面视图时,红色视图会随之滚动? 事实上,我也应该能够把手指放在红色区域,并滚动表格视图。

再一次,如果红色视图重叠一些水平线,它应该出现在线上。 不幸的是,当我只是将红色的视图作为子视图添加到表视图中时,水平线覆盖了红色视图; 看这个截图 。

这怎么能做到呢?

编辑

如果您正在尝试– bringSubviewToFront:上添加视图(隐藏行),请尝试使用– bringSubviewToFront:将其放在表视图的前面。

 [self.tableView bringSubviewToFront:redView]; 

其他

将视图添加到self.tableView.tableHeaderView这将把它放在表视图之上,并将滚动与表视图。

 UIView *redView = [[UIView alloc]init]; redView.frame = //set the frame redView.backgroundColor = [UIColor redColor]; self.tableView.tableHeaderView = redView; 

祝你好运

处理红色方块堆叠顺序的正确位置是layoutSubviews方法。 表视图发送自身layoutSubviews任何时候它添加或删除子视图(和其他时间)。

您需要创build一个UITableView的子类,它具有对红色方块的引用:

 @interface MyTableView : UITableView @property (weak, readonly) IBOutlet UIView *redSquare; @end 

你可以用任何你想要的方式初始化redSquare 。 我只是把它和表视图一起放在笔尖上,并把它移到了awakeFromNib中的表视图的子视图中:

 @implementation MyTableView @synthesize redSquare = _redSquare; - (void)awakeFromNib { [self addSubview:self.redSquare]; } 

无论如何,为了确保红色正方形始终位于表格单元格和网格线的顶部,请覆盖layoutSubviews如下所示:

 - (void)layoutSubviews { [super layoutSubviews]; [self bringSubviewToFront:self.redSquare]; } 

只需将此视图添加到UITableView作为子视图:

 [tableView addSubview:myRedView]; 

请参阅userInteractionEnabled属性以处理交互和滚动。

使你的视图的UITableView的任何正常的子视图的子视图:头,页脚或任何UITableViewCell

我认为你所描述的最好使用UITableViewCell甚至是头部的子视图来实现。 单元格具有滚动表格的固有能力,并且可以按照您喜欢的方式自定义。 这基本上是一个观点。

例如,在你的情况下,你可能会希望红色框默认出现在表格的顶部。 你可以将第一个单元格设置为“红色方块”单元格,在那里你可以将红色方块插入到单元格的内容视图中。

所以,你的问题基本上是,UITableView的UITableViewCells被dynamic地添加为Subviews,你无法控制它们被添加到视图的前面还是后面。

所以为了保持你的观点在前面,你需要在每次添加单元格的时候把它放回原处,这在UITableView滚动时发生。

我build议你尝试添加自定义视图作为子视图,然后重写-scrollViewDidScroll像这样:

 - (void)scrollViewDidScroll { [super scrollViewDidScroll]; // myCustomView is your custom view referenced in an IVar [self.tableView bringSubviewToFront:myCustomView]; } 

用这些行编辑你的viewWillAppear委托

 UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(30,30, 100, 100)]; redView.backgroundColor=[UIColor redColor]; [self.tableView addSubview:redView];