收藏ios

tableView collectionView联动

2017-08-08  本文已影响266人  超_iOS

博采众长
只看不敲只会原地踏步,只敲不看也是蒙眼走路.


image.png

双tableVeiw联动类似,在点击tableView联动collectionView时有不同.具体请看代码

#import "TCViewController.h"
#import "ZCCollectionViewCell.h"

@interface TCViewController ()<UITableViewDelegate, UITableViewDataSource,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@property (nonatomic , strong) UITableView *leftTableV;
@property (nonatomic , strong) UICollectionView *rightCollection;
@property (nonatomic , copy) NSArray *leftAry;
@property (nonatomic , copy) NSArray *rightAry;
@property (nonatomic , assign) BOOL isToDown;//向下滑
@end

@implementation TCViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _leftAry = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8"];
    
    self.rightAry = @[@[@"123",@"11",@"11111",@"11223344",@"11111",@"11223344",@"12345678",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"]];
    [self.view addSubview:self.leftTableV];
    [self.view addSubview:self.rightCollection];
    // Do any additional setup after loading the view.
}
- (UITableView *)leftTableV
{
    if (!_leftTableV) {
        _leftTableV = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, self.view.frame.size.height) style:UITableViewStylePlain];
        _leftTableV.backgroundColor = [UIColor redColor];
        _leftTableV.dataSource = self;
        _leftTableV.delegate = self;
        [_leftTableV registerClass:[UITableViewCell class] forCellReuseIdentifier:@"left"];
    }
    return _leftTableV;
}
- (UICollectionView *)rightCollection
{
    if (!_rightCollection) {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        layout.minimumInteritemSpacing = 3;
//        CGFloat w = ( self.view.frame.size.width - 100) / 2;
//        layout.itemSize = CGSizeMake(w, w);
        
        
        _rightCollection = [[UICollectionView alloc] initWithFrame:CGRectMake(100, 0, self.view.frame.size.width - 100, self.view.frame.size.height) collectionViewLayout:layout];
        _rightCollection.backgroundColor = [UIColor greenColor];
        _rightCollection.delegate = self;
        _rightCollection.dataSource = self;
        [_rightCollection registerClass:[ZCCollectionViewCell class] forCellWithReuseIdentifier:@"item"];
    
        [_rightCollection registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
    }
    return _rightCollection;
}

#pragma mark tableveiw
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.leftAry.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"left" forIndexPath:indexPath];
    cell.textLabel.text = self.leftAry[indexPath.row];
    return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.leftTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    //[self.rightCollection scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.row] atScrollPosition:UICollectionViewScrollPositionNone  animated:YES];//直接跳会不准,具体原因请大神解疑
    
    //重点
    
    NSIndexPath *rIndexPath = [NSIndexPath indexPathForItem:0 inSection:indexPath.row];//获取要滚动的区
    //获取此区的布局属性
    UICollectionViewLayoutAttributes *att = [self.rightCollection.collectionViewLayout layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:rIndexPath];
//    滚动位置
    CGPoint top = CGPointMake(0, att.frame.origin.y - self.rightCollection.contentInset.top);
    [self.rightCollection setContentOffset:top animated:YES];
    
    
    
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    static CGFloat offSetY = 0;
    if ((UICollectionView *)scrollView == _rightCollection) {
       self.isToDown = offSetY < scrollView.contentOffset.y;//xiangxia
        offSetY =scrollView.contentOffset.y;
    }
}

#pragma mark - collectionview
- (NSInteger )collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return ((NSArray *)self.rightAry[section]).count;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return self.rightAry.count;
}

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    ZCCollectionViewCell *item = [collectionView dequeueReusableCellWithReuseIdentifier:@"item" forIndexPath:indexPath];
       item.textLB.text = self.rightAry[indexPath.section][indexPath.row];
    item.backgroundColor =[UIColor cyanColor];
    return item;
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];
        for (UIView *view in header.subviews) {
            [view removeFromSuperview];
        }
        UILabel *textLB = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.rightCollection.frame.size.width, 30)];
        textLB.text = self.leftAry[indexPath.section];
        [header addSubview:textLB];
        header .backgroundColor = [UIColor yellowColor];
        return header;
        
    }
    return nil;
}
#pragma mark - layout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    return CGSizeMake(self.rightCollection.frame.size.width, 30);
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat w = ( self.rightCollection.frame.size.width - 3 * 3) / 2;
    return CGSizeMake(w, w);
}

#pragma mark - tableveiw 联动

//区头将出现
- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath{
    //向上而且是用户滚动
    if (!self.isToDown && (collectionView.dragging || collectionView.decelerating)) {
        if (indexPath.section == 0) {
            [self.leftTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section  inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

        }else
        {
            [self.leftTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section - 1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section -1 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
        }
       
    }
}

//区头展示结束
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath{
    //向下滑
    if (self.isToDown &&  (collectionView.dragging || collectionView.decelerating)) {
        [self.leftTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section  inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
        [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.section  inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
    }
}


上一篇下一篇

猜你喜欢

热点阅读