最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS實現(xiàn)左右兩個TableView聯(lián)動效果

 更新時間:2016年08月23日 16:02:14   作者:SunShineAku  
在我們?nèi)粘i_發(fā)IOS中,經(jīng)常見到兩個tableview的聯(lián)動,滑動一側(cè)tableview,另一側(cè)tableview跟著滑動,其實實現(xiàn)起來比較簡單,只是需要搞清楚他們之間的區(qū)別和聯(lián)系,下面一起來看看如何實現(xiàn)。

一、先來看看要實現(xiàn)的效果圖

二、小解析,可以先看看后面的!


三、實現(xiàn) tableView聯(lián)動 主要分兩種狀況

     1、點擊 左側(cè) cell 讓右側(cè) tableView 滾到對應(yīng)位置

     2、滑動 右側(cè) tableView 讓左側(cè) tableView 滾到對應(yīng)位置

1.先實現(xiàn)簡單的:點擊 左側(cè) cell 讓右側(cè) tableView 滾到對應(yīng)位置

//MARK: - 點擊 cell 的代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

 // 判斷是否為 左側(cè) 的 tableView
 if (tableView == self.leftTableView) {

  // 計算出 右側(cè) tableView 將要 滾動的 位置
  NSIndexPath *moveToIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.row];

  // 將右側(cè) tableView 移動到指定位置
  [self.rightTableView selectRowAtIndexPath:moveToIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];

  // 取消選中效果
  [self.rightTableView deselectRowAtIndexPath:moveToIndexPath animated:YES];
 }
}

左側(cè) 按鈕點擊的聯(lián)動 搞定!

2.滑動 右側(cè) tableView 讓左側(cè) tableView 滾到對應(yīng)位置

[self.rightTableView indexPathsForVisibleRows] 返回 所有顯示在界面的 cell 的 indexPath

//MARK: - 一個方法就能搞定 右邊滑動時跟左邊的聯(lián)動
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

 // 如果是 左側(cè)的 tableView 直接return
 if (scrollView == self.leftTableView) return;

 // 取出顯示在 視圖 且最靠上 的 cell 的 indexPath
 NSIndexPath *topHeaderViewIndexpath = [[self.rightTableView indexPathsForVisibleRows] firstObject];

 // 左側(cè) talbelView 移動到的位置 indexPath
 NSIndexPath *moveToIndexpath = [NSIndexPath indexPathForRow:topHeaderViewIndexpath.section inSection:0];

 // 移動 左側(cè) tableView 到 指定 indexPath 居中顯示
 [self.leftTableView selectRowAtIndexPath:moveToIndexpath animated:YES scrollPosition:UITableViewScrollPositionMiddle];

}

第二步 右側(cè) 滑動 跟左側(cè) 的聯(lián)動 搞定! 對的 就是這么簡單!!!

四、警告

看到別人通過這兩個方法判斷!!! 勿用!!!

會導(dǎo)致 tableView 的聯(lián)動 不準確

#pragma mark - UITableViewDelegate 代理方法 -
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
//
// headerView 將要顯示
// 這兩個方法都不準確
}
- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section {
//
// headerView 已經(jīng)顯示
// 這兩個方法都不準確
}

五、以下是所有示例代碼

//
// ViewController.m
// 左右雙tableView聯(lián)動
//
// Created by 阿酷 on 16/8/20.
// Copyright © 2016年 AkuApp. All rights reserved.
//

#import "ViewController.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"
#define rightCellIdentifier @"rightCellIdentifier"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, weak) UITableView *leftTableView;

@property (nonatomic, weak) UITableView *rightTableView;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];

 [self.view addSubview:self.leftTableView];
 [self.view addSubview:self.rightTableView];
}


#pragma mark - tableView 數(shù)據(jù)源代理方法 -
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

 if (tableView == self.leftTableView) return 40;
 return 8;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

 if (tableView == self.leftTableView) return 1;
 return 40;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 UITableViewCell *cell;

 // 左邊的 view
 if (tableView == self.leftTableView) {

  cell = [tableView dequeueReusableCellWithIdentifier:leftCellIdentifier forIndexPath:indexPath];
  cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];

  // 右邊的 view
 } else {

  cell = [tableView dequeueReusableCellWithIdentifier:rightCellIdentifier forIndexPath:indexPath];
  cell.textLabel.text = [NSString stringWithFormat:@"第%ld組-第%ld行", indexPath.section, indexPath.row];
 }

 return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

 if (tableView == self.rightTableView) return [NSString stringWithFormat:@"第 %ld 組", section];

 return nil;
}


#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.rightTableView indexPathsForVisibleRows] firstObject];

 // 左側(cè) talbelView 移動的 indexPath
 NSIndexPath *moveToIndexpath = [NSIndexPath indexPathForRow:topHeaderViewIndexpath.section inSection: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 indexPathForRow:0 inSection:indexPath.row];

  // 將右側(cè) tableView 移動到指定位置
  [self.rightTableView selectRowAtIndexPath:moveToIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];

  // 取消選中效果
  [self.rightTableView deselectRowAtIndexPath:moveToIndexPath animated:YES];
 }
}

#pragma mark - 懶加載 tableView -
// MARK: - 左邊的 tableView
- (UITableView *)leftTableView {

 if (!_leftTableView) {

  UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, leftTableWidth, ScreenHeight)];

  [self.view addSubview:tableView];

  _leftTableView = tableView;

  tableView.dataSource = self;
  tableView.delegate = self;

  [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:leftCellIdentifier];
  tableView.backgroundColor = [UIColor redColor];
  tableView.tableFooterView = [[UIView alloc] init];

 }
 return _leftTableView;
}

// MARK: - 右邊的 tableView
- (UITableView *)rightTableView {

 if (!_rightTableView) {

  UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(leftTableWidth, 0, rightTableWidth, ScreenHeight)];

  [self.view addSubview:tableView];

  _rightTableView = tableView;

  tableView.dataSource = self;
  tableView.delegate = self;

  [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:rightCellIdentifier];
  tableView.backgroundColor = [UIColor cyanColor];
  tableView.tableFooterView = [[UIView alloc] init];

 }
 return _rightTableView;
}
@end

六、總結(jié)

IOS實現(xiàn)左右兩個TableView聯(lián)動效果的內(nèi)容到這就結(jié)束了,這種的效果在我們平常的時候還是挺常見的,感興趣的朋友們可以自己動手操作起來,希望對大家的學(xué)習(xí)工作能有所幫助。

相關(guān)文章

  • iOS簡單畫板開發(fā)案例分享

    iOS簡單畫板開發(fā)案例分享

    這篇文章主要為大家分享了iOS實現(xiàn)簡單畫板開發(fā)案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • iOS自定義相機實現(xiàn)拍照、錄制視頻

    iOS自定義相機實現(xiàn)拍照、錄制視頻

    這篇文章主要為大家詳細介紹了iOS自定義相機實現(xiàn)拍照、錄制視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iOS開發(fā)之UIKeyboardTypeNumberPad數(shù)字鍵盤自定義按鍵

    iOS開發(fā)之UIKeyboardTypeNumberPad數(shù)字鍵盤自定義按鍵

    這篇文章主要介紹了iOS開發(fā)之UIKeyboardTypeNumberPad數(shù)字鍵盤自定義按鍵 的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • iOS中NSNumberFormatter的介紹與用法

    iOS中NSNumberFormatter的介紹與用法

    NSNumberFormatter 應(yīng)該可以滿足你對數(shù)據(jù)形式的一般需求,值得了解一下,下面這篇文章主要給大家介紹了關(guān)于iOS中NSNumberFormatter的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 詳解使用ISO鏡像搭建私有yum源

    詳解使用ISO鏡像搭建私有yum源

    這篇文章主要介紹了詳解使用ISO鏡像搭建私有yum源,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • iOS開發(fā)技巧之自定義相機

    iOS開發(fā)技巧之自定義相機

    這篇文章主要為大家詳細介紹了iOS開發(fā)技巧之自定義相機,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Xcode中iOS應(yīng)用開發(fā)的一般項目目錄結(jié)構(gòu)和流程簡介

    Xcode中iOS應(yīng)用開發(fā)的一般項目目錄結(jié)構(gòu)和流程簡介

    這篇文章主要介紹了Xcode中iOS應(yīng)用開發(fā)的一般項目目錄結(jié)構(gòu)和流程簡介,包括項目所需的一些平臺路徑如模擬器路徑等的介紹,需要的朋友可以參考下
    2016-02-02
  • 詳解iOS 實現(xiàn)一對多代理方案

    詳解iOS 實現(xiàn)一對多代理方案

    本文主要介紹了iOS 實現(xiàn)一對多代理方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • iOS開發(fā)之獲取LaunchImage啟動圖的實例

    iOS開發(fā)之獲取LaunchImage啟動圖的實例

    下面小編就為大家分享一篇iOS開發(fā)之獲取LaunchImage啟動圖的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • IOS開發(fā)中NSURL的基本操作及用法詳解

    IOS開發(fā)中NSURL的基本操作及用法詳解

    NSURL其實就是我們在瀏覽器上看到的網(wǎng)站地址,這不就是一個字符串么,為什么還要在寫一個NSURL呢,主要是因為網(wǎng)站地址的字符串都比較復(fù)雜,包括很多請求參數(shù),這樣在請求過程中需要解析出來每個部門,所以封裝一個NSURL,操作很方便
    2015-12-12

最新評論

尚义县| 于田县| 彭山县| 德格县| 丹江口市| 临潭县| 金湖县| 通江县| 循化| 山东省| 金乡县| 浏阳市| 习水县| 通山县| 廉江市| 长汀县| 田林县| 平定县| 江北区| 东安县| 韶关市| 凤山市| 富民县| 北碚区| 锡林郭勒盟| 灵宝市| 岳阳县| 甘谷县| 定陶县| 边坝县| 陈巴尔虎旗| 洱源县| 武邑县| 灵台县| 铁岭市| 西乌| 舒城县| 石林| 舒兰市| 灵寿县| 黄梅县|