參考網(wǎng)址?http://m.itdecent.cn/p/b2589fff500a

#import "ViewController.h"
#import "HeaderCollectionReusableView.h"
#import "TKYDataBankCell.h"
#define leftTableWidth? [UIScreen mainScreen].bounds.size.width *0.3
#define rightTableWidth [UIScreen mainScreen].bounds.size.width *0.7
#define ScreenWidth? ? [UIScreen mainScreen].bounds.size.width
#define ScreenHeight? ? [UIScreen mainScreen].bounds.size.height
#define leftCellIdentifier? @"leftCellIdentifier"
NSString*identifier =@"cell";
NSString*headerIdentifier =@"header";
NSString*footerIdentifier =@"footer";
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout, UICollectionViewDelegate>
@property (nonatomic, weak) UITableView *leftTableView;
@property(nonatomic,strong)UICollectionView*rightCollectionView;
@end
@implementation ViewController
- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? [self.view addSubview:self.leftTableView];
? ? [self initCollectionView];
? ? // Do any additional setup after loading the view, typically from a nib.
}
#pragma mark - tableView 數(shù)據(jù)源代理方法 -
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
? ? return 40;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
? ? return 1;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
? ? UITableViewCell *cell;
? ? // 左邊的 view
? ? if(tableView ==self.leftTableView) {
? ? ? ? cell = [tableViewdequeueReusableCellWithIdentifier:leftCellIdentifier forIndexPath:indexPath];
? ? ? ? cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];
? ? }
? ? returncell;
}
#pragma mark - UITableViewDelegate 代理方法 -
//- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section {
//
//? ? 這兩個方法都不準確
//}
//
//- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
//
//? ? 這兩個方法都不準確
//}
//MARK: - 一個方法就能搞定 右邊滑動時跟左邊的聯(lián)動
- (void)scrollViewDidScroll:(UIScrollView*)scrollView {
? ? // 如果是 左側(cè)的 tableView 直接return
? ? if(scrollView ==self.leftTableView)return;
? ? // 取出顯示在 視圖 且最靠上 的 cell 的 indexPath
? ? NSIndexPath *topHeaderViewIndexpath = [[self.rightCollectionView indexPathsForVisibleItems] firstObject];
? ? // 左側(cè) talbelView 移動的 indexPath
? ? NSIndexPath*moveToIndexpath = [NSIndexPathindexPathForRow:topHeaderViewIndexpath.sectioninSection:0];
? ? // 移動 左側(cè) tableView 到 指定 indexPath 居中顯示
? ? [self.leftTableView selectRowAtIndexPath:moveToIndexpath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
//MARK: - 點擊 cell 的代理方法
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
? ? // 選中 左側(cè) 的 tableView
? ? if(tableView ==self.leftTableView) {
? ? ? ? NSIndexPath*moveToIndexPath? = [NSIndexPath indexPathForItem:0 inSection:indexPath.item];
? ? ? //? NSIndexPath *moveToIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.row];
? ? ? ? // 將右側(cè) tableView 移動到指定位置
? ? ? ? [self.rightCollectionView selectItemAtIndexPath:moveToIndexPath animated:YES scrollPosition:(UICollectionViewScrollPositionTop)];
?? ? ? // [self.rightCollectionView selectRowAtIndexPath:moveToIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
? ? ? ? // 取消選中效果
? ? ? ? [self.rightCollectionView deselectItemAtIndexPath:moveToIndexPath animated:YES];
? ? }
}
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath{
? ? TKYDataBankCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
? ? cell.nameLabel.text= [NSStringstringWithFormat:@"區(qū):%ld,行:%ld", indexPath.section,indexPath.item];
? ? cell.backgroundColor = [UIColor yellowColor];
? ? returncell;
}
// 設置每個分區(qū)返回多少item
-(NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section{
? ? return 16;
}
// 設置集合視圖有多少個分區(qū)
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView{
? ? return 39;
}
/**
?*? 返回增補視圖
?*
?*? @paramcollectionView
?*? @paramkind
?*? @paramindexPath
?*
?*? @return
?*/
- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath{
? ? // 如果是頭視圖
? ? if (kind == UICollectionElementKindSectionHeader) {
? ? ? ? // 從重用池里面取
? ? ? ? HeaderCollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier forIndexPath:indexPath];
? ? ? ? headerView.backgroundColor =[UIColor orangeColor];
?? ? ? // headerView.titleLabel.text = @"測試";
? ? ? ? returnheaderView;
? ? }else{
? ? ? ? UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:footerIdentifier forIndexPath:indexPath];
? ? ? ? //? ? ? ? footerView.backgroundColor = [UIColor brownColor];
? ? ? ? //? ? ? ? return footerView;
? ? ? ? returnnil;
? ? }
}
#pragma mark - 懶加載 tableView -
// MARK: - 左邊的 tableView
- (UITableView*)leftTableView {
? ? if (!_leftTableView) {
? ? ? ? UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 84, leftTableWidth, ScreenHeight)];
? ? ? ? [self.viewaddSubview:tableView];
? ? ? ? _leftTableView= tableView;
? ? ? ? tableView.dataSource=self;
? ? ? ? tableView.delegate=self;
? ? ? ? [tableViewregisterClass:[UITableViewCell class] forCellReuseIdentifier:leftCellIdentifier];
? ? ? ? tableView.backgroundColor = [UIColor redColor];
? ? ? ? tableView.tableFooterView = [[UIView alloc] init];
? ? }
? ? return _leftTableView;
}
- (void)initCollectionView{
? ? UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
? ? flowLayout.itemSize = CGSizeMake((self.view.frame.size.width- leftTableWidth-3)/3,? 50);
? ? // 設置最小行間距
? ? flowLayout.minimumLineSpacing=1;
? ? // 最小列間距
? ? flowLayout.minimumInteritemSpacing = 1;
? ? flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
? ? //flowLayout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
?? ? flowLayout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 30);
? ? UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(leftTableWidth, 84, rightTableWidth, ScreenHeight) collectionViewLayout:flowLayout];
? ? //設置屬性
? ? collectionView.delegate=self;
? ? collectionView.dataSource=self;
? ? // 是否顯示垂直方向指示標, 繼承于UIScrollView, 他的方法可以調(diào)用
? ? collectionView.showsVerticalScrollIndicator = NO;
? ? [collectionViewregisterClass:[TKYDataBankCell class] forCellWithReuseIdentifier:identifier];
? ?/**
?? ? *? 注冊增補視圖
?? ? */
? ? [collectionViewregisterClass:[HeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];
? ?[collectionViewregisterClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier];
? ? self.rightCollectionView= collectionView;
? ? [self.view addSubview:self.rightCollectionView];
}