模仿微博,网易云音乐个人主页

1.很久没写过博客了,最近项目要仿照微博个人主页和网易云音乐个人主页那样,多个UITableView共用一个tableHeaderView,可以左右切换不同tableView,也可以点击特定按钮切换不同的tableView 



1.实现思路

在控制器中初始化一个UICollectionView,让其左右滑动,在当前控制器中添加三个其他控制器,把这三个控制器分别放在UICollectionViewCell中,这样滑动的时候就可以切换不同的控制器了,然后在其他控制器添加你需要的不同UITableView,这样耦合度就小了。

#pragma mark - UICollectionViewDataSource

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

return [[self childViewControllers] count];

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifer forIndexPath:indexPath];

if (!cell) {

cell = [[UICollectionViewCell alloc] init];

}

[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

ZDTableViewController *vc = self.childViewControllers[indexPath.row];

for (UIView *view in cell.contentView.subviews) {

[view removeFromSuperview];

}

[cell.contentView addSubview:vc.view];

return cell;

}

在UICollectionView所造的控制器顶部放一个headerView高度为200(具体高度可以自己定),每个UITableView设置它的tableHeaderView高度也为200。在UITableView滑动的时候改变headerView的位置,可以写一个父类UITableViewController控制器让三个控制器集成这个父类,父类控制器写一个代理来传递UITableVIew滑动的偏移量

UITableVIewController父类.h

#import@protocol ZDTableViewDelegate- (void)tableViewDidScroll:(UIScrollView *)scrollView;@end@interface ZDTableViewController : UITableViewController@property (nonatomic,weak)idscrollViewDelegate;

- (void)setContentOffset:(CGFloat)Offset withTag:(NSInteger)tag;

@end

父类.m

#import "ZDTableViewController.h"

@interface ZDTableViewController ()

@end

@implementation ZDTableViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

//每一个tableView头部初始化一个占位view

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, HEADERVIEW_HEIGHT)];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (void)setContentOffset:(CGFloat)Offset withTag:(NSInteger)tag{

}

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

if([self.scrollViewDelegate respondsToSelector:@selector(tableViewDidScroll:)])

{

[self.scrollViewDelegate tableViewDidScroll:scrollView];

}

}

@end

具体代码实现GitHub   代码下载链接

Swift版GitHub     Swift版链接

你可能感兴趣的:(模仿微博,网易云音乐个人主页)