繁体   English   中英

将自定义视图放入UITableView

[英]Putting a custom view into a UITableView

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

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

如何将后者放入前者中,以便它出现水平线上,但仍然是表格视图的“一部分”,即当我在周围滚动表格视图时,红色视图也会随之滚动? 实际上,我还应该可以将手指放在红色区域上并滚动表格视图。

同样,如果将红色视图放置为与某些水平线重叠,则该红色视图应显示这些线的上方 可悲的是,当我仅将红色视图作为子视图添加到表格视图时,水平线越过红色视图; 看到这个截图

如何做到这一点?

处理红场的堆叠顺序的正确位置是在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];
}

编辑

如果您试图将视图添加到行上方(隐藏行),请尝试使用– 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;

祝好运

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

[tableView addSubview:myRedView];

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

使您的视图成为UITableView的任何常规子视图的子视图:标头,页脚或任何UITableViewCell

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

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

因此,您的问题基本上是,将UITableView的UITableViewCells动态添加为子视图,并且无法控制是否将它们添加到视图的前面或后面。

因此,要将视图保持在最前面,您需要在每次添加单元格时将其放回到此处,这是在UITableView滚动时发生的。

我建议您尝试将自定义视图添加为子视图,然后像这样重写-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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM