多个tableView嵌套tableView Plain 样式下
1:如图实现下面的效果
一:tableViewPlain样式大家都应该很清楚了,它可以让sectionHeader 悬停,但如果要实现如下多个tableView这样的效果就只能自定义了.
项目地址:https://github.com/KylinSpace/TableViewsInTableView.git
实现方案:
第一:在控制器中添加三个了控件,最上面类似于tableViewHeader,使用UIView添加一个imageView;
中间类似于tableViewSectionHeader使用一个scrollView方便以后进行扩展;
最下面用于展示四个tableview的也用scrollView(该scrollView是自定义的一个,因为要实现scrollView中的tableView左滑删除功能,请参考我另外一篇文章);接下来就是布局了,这个大家应该都会了;
第二:怎么让实现headerView跟着tableView滚动来变化,sectionHeader怎么悬停这才是关键思路
首先:在每个tableView中设置一个代理,tableView滚动的时侯会调用scrollView的这个代理方法,我们让代理执行代理方法,然后传送tableView滚动的Y值给到代理
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if ([self.delegate respondsToSelector:@selector(KylinOneViewTableViewDidScroll:)]) {
[self.delegate KylinOneViewTableViewDidScroll:scrollView.contentOffset.y];
}
}
其次:让主控制器成为每一个tableView的代理,然后实现代理方法
- (void)KylinOneViewTableViewDidScroll:(CGFloat)scrollY{
}
然后:根据tableView滚动的Y值时时的更新tableViewHeader的frame.
解决切换控制时闪一下的BUG 在 方法 - (void)addChildViewInContentView:(NSInteger)index 中
添加 两句代码
// 取出要跳转的view
KylinTwoViewController *twovc = (KylinTwoViewController *)childView;
// 跳转时滚动到当前view 的offsetY位置
[self KylinScrollToChangeHeaderViewHeight:twovc.tableView.contentOffset.y];
文章只能写个大体思路而已,具体代码请看我的源代码
新浪微博 火柴大男人