将自定义视图放入UITableView

Enc*_*ada 8 cocoa-touch objective-c ios

我有一个常规风格的UITableView-具有白色背景和灰色水平线来分隔行.

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

如何将后者放入前者,使其出现水平线上,但仍然是表视图的"部分",因为当我滚动表视图时,红色视图会随之滚动?事实上,我也应该能够将手指放在红色区域并滚动表格视图.

再一次,如果红色视图被放置重叠一些水平行,它应该出现的行.可悲的是,当我只是将红色视图作为子视图添加到表视图时,水平线会越过红色视图; 看这个截图.

如何实现这一目标?

rob*_*off 12

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

你需要创建一个UITableView具有红色方块引用的子类:

@interface MyTableView : UITableView

@property (weak, readonly) IBOutlet UIView *redSquare;

@end
Run Code Online (Sandbox Code Playgroud)

您可以redSquare以任何您想要的方式初始化.我只是将它与表视图一起放在我的笔尖中,并将其移动为表视图的子视图awakeFromNib:

@implementation MyTableView

@synthesize redSquare = _redSquare;

- (void)awakeFromNib {
    [self addSubview:self.redSquare];
}
Run Code Online (Sandbox Code Playgroud)

无论如何,要确保红色方块始终位于表格单元格和网格线之上,请按以下方式覆盖layoutSubviews:

- (void)layoutSubviews {
    [super layoutSubviews];
    [self bringSubviewToFront:self.redSquare];
}
Run Code Online (Sandbox Code Playgroud)


sha*_*oga 6

编辑

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

[self.tableView bringSubviewToFront:redView];
Run Code Online (Sandbox Code Playgroud)

其他

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

UIView *redView = [[UIView alloc]init];
  redView.frame = //set the frame 
  redView.backgroundColor = [UIColor redColor];
  self.tableView.tableHeaderView = redView;
Run Code Online (Sandbox Code Playgroud)

祝好运