将自定义视图放入UITableView

时间:2012-01-30 16:52:08

标签: objective-c ios cocoa-touch

我有一个普通风格的UITableView--一个白色背景和灰色水平线来分隔行。

我有另一个自定义UIView,它只是一个填充了redColor的100x100矩形。

如何将后者置于前者中,使其在水平线上显示 ,但在滚动表格视图时仍然是表格视图的“部分”周围,​​红色视图滚动它?事实上,我还应该能够将手指放在红色区域并滚动表格视图。

再次,如果红色视图与某些水平线重叠,则它应显示为 线条。可悲的是,当我只是将红色视图作为子视图添加到表视图时,水平线会越过红色视图;见this screenshot

如何实现这一目标?

7 个答案:

答案 0 :(得分:12)

处理红色方块堆叠顺序的正确位置是layoutSubviews方法。每次添加或删除子视图时(以及其他时间),表格视图都会自行发送layoutSubviews

您需要创建一个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];
}

答案 1 :(得分:6)

修改

如果您尝试在视图上方添加视图(隐藏线条),请尝试使用– bringSubviewToFront:将其带到表格视图的前面。

[self.tableView bringSubviewToFront:redView];

<强> ELSE

将视图添加到self.tableView.tableHeaderView,这会将其放在表格视图上方,并使用表格视图滚动。

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

祝你好运

答案 2 :(得分:1)

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

[tableView addSubview:myRedView];

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

答案 3 :(得分:0)

将您的观看视为UITableView的任何正常子视图的子视图:标题,页脚或任何UITableViewCell

答案 4 :(得分:0)

我认为您所描述的内容最好使用UITableViewCell甚至是标题的子视图来实现。单元格具有滚动表格的固有能力,可以按照您喜欢的方式进行自定义。它本质上是一种观点。

例如,在您的情况下,您可能希望红色框默认显示在表格的顶部。您可以将第一个单元格设置为“红色框”单元格,然后将红色框插入单元格的内容视图中。

答案 5 :(得分:0)

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

因此,为了保持您的视图在前面,您需要在每次添加单元格时将其返回到该位置,这在UITableView滚动时会发生。

我建议您尝试将自定义视图添加为子视图,然后覆盖-scrollViewDidScroll,如下所示:

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

答案 6 :(得分:0)

使用这些行编辑viewWillAppear委托

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