欢迎光临
我们一直在努力

鹏哥哥联动

建站超值云服务器,限时71元/月

鹏哥哥联动

项目介绍:

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]
代码实现,千变万化,只要用户体验好,怎么实现效果都可以

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 鹏哥哥联动
分享到: 更多 (0)