登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

鹏哥哥联动

[复制链接]
来自: FSD_xiao 分类: iOS精品源码 上传时间: 2017-12-7 09:03:09
Tag:

项目介绍:

PGGTableViewLinkage

代码下载地址 https://github.com/penghero/PGGTableViewLinkage.git
鹏哥哥联动 如果对您有所帮助 请去上面github送我一个星星呗 感谢您!

PGGTableViewLinkage

先介绍一下 功能点:
1.tableview与tableview的联动实现
2.tableview与collectionview的联动实现
3.collection中列表与网格视图的转换
4.使用YYModel对数据进行解析并转成模型
5.使用SDWebImage对图片进行处理
6.使用cocoapods对三方库的方便管理
7.对plist文件和json文件的解析处理
8.自定义控件的使用与简单布局
重点来了!!!
要想实现联动 首先创建左侧tableview 与右侧tableview或者是collectionview ,其次 对其进行初始化和布局,先实现数据的分别展示,前面这些这两种方式都一样,
到重点了
联动的实现方式 (其实通用)
第一种 也就是tableview与tableview的联动实现
在tableview的didSelectRowAtIndexPath代理方法中处理点击左侧视图 改变右侧显示位置 代码中注释较为详细 仔细看

  • (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath {
    //判断是否为 左侧 的 tableView

if (tableView == self.provinceTableView) {
//计算出 右侧 tableView 将要 滚动的 位置
NSIndexPath *moveToIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.row];
//将 rightTableView 移动到对应的 位置
//注:动画属性一定要设置为NO 否则 左边显示不准确
[self.cityTableView scrollToRowAtIndexPath:moveToIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
}
左侧联动处理完 下面处理右侧滑动 ,从而带动左侧跳转到响应位置 这个是通过scrollview的scrollViewDidScroll代理方法实现
// 处理右边滑动时跟左边的联动

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // 如果是 左侧的 tableView 直接return

if (scrollView == self.provinceTableView) return;
// 取出显示在 视图 且最靠上 的 cell 的 indexPath
NSIndexPath *topHeaderViewIndexpath = [[self.cityTableView indexPathsForVisibleRows] firstObject];
// 左侧 talbelView 移动到的位置 indexPath
NSIndexPath *moveToIndexpath = [NSIndexPath indexPathForRow:topHeaderViewIndexpath.section inSection:0];
// 移动 左侧 tableView 到 指定 indexPath 居中显示
[self.provinceTableView selectRowAtIndexPath:moveToIndexpath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
这样就实现了联动。但是,这中实现方法较为简单 但是用的时候有弊病 就是 必须要先滑动右侧 触发ecrollviewdelegate的代理方法
然后在点击左侧tableview才会较为准确的展示联动,如果先点击左侧,这样会不准确 会差一个section的位置 ,
还有就是开头的前三到4个section和结尾的三到四个section有时候会没有响应效果,也可能是我处理的不对,
注:::实际开发并不推荐用这种方式,虽说实现简单,但是效果不佳,推荐使用下一个 tableview与collection的联动实现方式。
联动实现 方式二:(推荐使用)
先将TableView关联CollectionView,点击TableViewCell,右边的CollectionView跳到相应的分区列表头部。

  • (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath{

    _selectIndex = indexPath.row;//记录位置
    //核心方法 根据NSIndexPath跳转到指定位置
    [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:_selectIndex] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];

    }

再将CollectionView关联TableView,标记一下RightTableView的滚动方向,然后分别在CollectionView分区标题即将展示和展示结束的代理函数里面处理逻辑。
1.在CollectionView分区标题即将展示里面,判断 当前CollectionView滚动的方向向上,CollectionView是用户拖拽而产生滚动的(主要是判断CollectionView是用户拖拽而滚动的,还是点击TableView而滚动的),
如果二者都成立,那么TableView的选中行就是CollectionView的当前section。
2.在CollectionView分区标题展示结束里面,判断当前CollectionView滚动的方向向下,CollectionView是用户拖拽而产生滚动的,如果二者都成立,那么TableView的选中行就是CollectionView的当前section-1。
// 标记一下CollectionView的滚动方向,是向上还是向下

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    static float lastOffsetY = 0;
    if (self.collectionView == scrollView) {

    _isScrollDown = lastOffsetY < scrollView.contentOffset.y;
    lastOffsetY = scrollView.contentOffset.y;

    }
    }

// CollectionView分区标题即将展示

  • (void)collectionView:(UICollectionView )collectionView willDisplaySupplementaryView:(UICollectionReusableView )view forElementKind:(NSString )elementKind atIndexPath:(NSIndexPath )indexPath{
    // 当前CollectionView滚动的方向向上,CollectionView是用户拖拽而产生滚动的(主要是判断CollectionView是用户拖拽而滚动的,还是点击TableView而滚动的)
    if (!_isScrollDown && collectionView.dragging){

    [self selectRowAtIndexPath:indexPath.section];

    }
    }

// CollectionView分区标题展示结束

  • (void)collectionView:(UICollectionView )collectionView didEndDisplayingSupplementaryView:(nonnull UICollectionReusableView )view forElementOfKind:(nonnull NSString )elementKind atIndexPath:(nonnull NSIndexPath )indexPath{
    // 当前CollectionView滚动的方向向下,CollectionView是用户拖拽而产生滚动的(主要是判断CollectionView是用户拖拽而滚动的,还是点击TableView而滚动的)
    if (_isScrollDown && collectionView.dragging){

    [self selectRowAtIndexPath:indexPath.section + 1];

    }
    }

// 当拖动CollectionView的时候,处理TableView

  • (void)selectRowAtIndexPath:(NSInteger)index{

    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];

    }

注:该两种实现方式的核心方法 [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle]
代码实现,千变万化,只要用户体验好,怎么实现效果都可以

相关源码推荐:

我来说两句
*滑动验证:
所有评论(5)
phoiu 2017-12-7 10:41:55
内容很好,棒棒哒
回复
hellokenken 2017-12-7 10:45:45
好好 学习了 确实不错
回复
littleRed 2017-12-7 10:46:35
帮帮顶顶!!
回复
BlueManlove 2017-12-7 10:47:38
写的真的很不错
回复
kengsir 2017-12-7 10:48:07
支持,感谢,祝code4app越来越好~
回复
AlonMessi 2017-12-7 10:56:27
我是来学习的
回复
code4app热心网友 2017-12-7 14:40:31
学习学习!
回复
code4app热心网友 2017-12-7 15:42:16
我只是路过打酱油的。
回复
code4app热心网友 2017-12-7 16:15:32
虽不明,但觉厉!
回复
提取码:  下载次数:36 状态:已购或VIP 售价:0(原价:20)金钱 下载权限:初级码农 
426 0 36
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表