欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS中UIScrollView嵌套UITableView的實踐教程

 更新時間:2017年05月02日 11:33:08   作者:maxZhang  
在UIScrollView嵌套UITableView的問題相信大家都遇到過,小編最近在工作中就遇到了這個問題,所以這篇文章主要介紹了iOS中UIScrollView嵌套UITableView的相關(guān)資料,文中介紹的方法是通過自己的實踐所得來的,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

最近因為工作項目中需要用到UIScrollView嵌套UItableView嵌套交互問題,順便網(wǎng)上搜了下的demo,發(fā)現(xiàn)實現(xiàn)的效果并不是很理想,滑動偶爾會有延遲現(xiàn)象,所以自己想了個辦法,順便把自己實現(xiàn)寫了個demo分享出來,一起來看看吧。

實現(xiàn)過程

最底部放置的為一個UIScrollView,設(shè)置ScrollView的contentSize屬性,使可以發(fā)生橫向滾動,同時隱藏橫向滾動條,設(shè)置代理為當前控制器本身。然后,在最底部的UIScrollView上放置2個UITableView,因為只有2個所以沒有考慮重用問題,如果數(shù)量大于3個建議寫下UIScrollView子視圖的重用。最后在最上面覆蓋一個topView,使得它可以和tableView發(fā)生縱向滾動,為了實現(xiàn)最上面的topView可以隨著tableView發(fā)生一起滾動,需要在tableView的scrollViewDidScroll代理方法中獲取tableview的contentOffset偏移量,隨便改變topView的frame。

當手勢點開始落在從topView上時候,在controller的loadView方法中設(shè)置自定義view,通過在自定義view中重載hittest方法,判斷是否需要讓tableView進行交互。此時需要注意的是因為有自定義的左右選擇segmentControl,這么設(shè)置的時候segmentController是不會相應(yīng)點擊方法的。為了讓segmentController可以實現(xiàn)隨著tableView滾動并且可以相應(yīng)單擊事件,我在在controller的view上添加了單擊手勢,判定是否點擊在了自定義的segmentControll上(因為tableView本身不會相應(yīng)- (void)touchesBegan:(NSSet<UITouch *> )touches withEvent:(UIEvent )event事件,所以也可以自定義一個tableVuew,重載touchBegin 等方法,然后把tableView繼承自這個tableView, 這樣就可以相應(yīng)相應(yīng)的touchbegin等方法了), 好了,下面直接上代碼

controller中代碼如下:

#pragma mark - 底部的scrollViuew的代理方法scrollViewDidScroll

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 CGFloat placeholderOffset = 0;
 if (self.topView.getSelectedItemIndex == 0) {
  if (self.firstTableView.contentOffset.y > self.topView.height - kItemheight) {
   placeholderOffset = self.topView.height - kItemheight;
  }
  else {
   placeholderOffset = self.firstTableView.contentOffset.y;
  }
  [self.secondTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];
 }
 else {
  if (self.secondTableView.contentOffset.y > self.topView.height - kItemheight) {
   placeholderOffset = self.topView.height - kItemheight;
  }
  else {
   placeholderOffset = self.secondTableView.contentOffset.y;
  }
  [self.firstTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];
 }
}
#pragma mark - 底部的scrollViuew的代理方法scrollViewDidEndDecelerating

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{ 
 NSInteger index = ceilf(scrollView.contentOffset.x / kScreen_Width);
 self.topView.selectedItemIndex = index;
}

controller中view的代碼如下

#pragma mark - 重載系統(tǒng)的hitTest方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
 ViewController *currentVC = (ViewController *)self.nextResponder;
 currentVC.printPoint = point;
 if ([self.topView pointInside:point withEvent:event]) {
  self.scrollView.scrollEnabled = NO;
  if (self.scrollView.contentOffset.x < kScreen_Width *0.5) {
   return self.firstTableView;
  } else {
   return self.secondTableView;
  }
 } else {
  self.scrollView.scrollEnabled = YES;
  return [super hitTest:point withEvent:event];
 }
}
#pragma mark - 添加手勢的相應(yīng)方法

- (void)tapGestureAction:(UITapGestureRecognizer *)gesture
{
 CGPoint point = [gesture locationInView:self.topView];
 if (CGRectContainsPoint(self.topView.leftBtnFrame, point)) {
  if (self.scrollView.contentOffset.x > 0.5 * kScreen_Width) {
   [self.scrollView setContentOffset:CGPointMake(0, 0) animated:NO];
   self.topView.selectedItemIndex = 0;
  }
 } else if (CGRectContainsPoint(self.topView.rightBtnFrame, point)) {
  if (self.scrollView.contentOffset.x < 0.5 * kScreen_Width) {
   [self.scrollView setContentOffset:CGPointMake(kScreen_Width, 0) animated:NO];
   self.topView.selectedItemIndex = 1;
  }
 }
}
#pragma mark - firstTableView的代理方法scrollViewDidScroll

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 CGFloat placeHolderHeight = self.topView.height - self.topView.itemHeight;

 CGFloat offsetY = scrollView.contentOffset.y;

 if (offsetY >= 0 && offsetY <= placeHolderHeight) {
  self.topView.y = -offsetY;
 }
 else if (offsetY > placeHolderHeight) {
  self.topView.y = - placeHolderHeight;
 }
 else if (offsetY <0) {
  self.topView.y = - offsetY;
 }
}
#pragma mark - secondTableView的代理方法scrollViewDidScroll

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 CGFloat placeHolderHeight = self.topView.height - self.topView.itemHeight;
 CGFloat offsetY = scrollView.contentOffset.y;
 if (offsetY >= 0 && offsetY <= placeHolderHeight) {
  self.topView.y = -offsetY;
 } else if (offsetY > placeHolderHeight) {
  self.topView.y = - placeHolderHeight;
 } else if (offsetY <0) {
  self.topView.y = - offsetY;
 }
}

完整項目下載地址如下:https://github.com/maxzhang123/nestScrollView  或者本地下載地址:http://xiazai.jb51.net/201705/yuanma/nestScrollView(jb51.net).rar

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS異步下載圖片實例代碼

    iOS異步下載圖片實例代碼

    這篇文章主要介紹了iOS異步下載圖片實例代碼的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋

    IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋

    這篇文章主要介紹了IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS使用核心的50行代碼擼一個路由組件

    iOS使用核心的50行代碼擼一個路由組件

    使用組件化是為了解耦處理,多個模塊之間通過協(xié)議進行交互。本文給大家介紹iOS使用核心的50行代碼擼一個路由組件的相關(guān)知識,需要的朋友可以參考下
    2018-09-09
  • iOS如何將照片保存到相冊

    iOS如何將照片保存到相冊

    這篇文章主要為大家詳細介紹了iOS將照片保存到相冊的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • iOS將相冊中圖片上傳至服務(wù)器的方法

    iOS將相冊中圖片上傳至服務(wù)器的方法

    這篇文章主要為大家詳細介紹了iOS將相冊中圖片上傳至服務(wù)器的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • IOS開發(fā)壓縮后圖片模糊問題解決

    IOS開發(fā)壓縮后圖片模糊問題解決

    這篇文章主要為大家介紹了IOS開發(fā)壓縮后圖片模糊問題解決實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • swift3.0網(wǎng)絡(luò)圖片緩存原理簡析

    swift3.0網(wǎng)絡(luò)圖片緩存原理簡析

    這篇文章主要為大家簡析了swift3.0網(wǎng)絡(luò)圖片緩存原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • IOS  Swift3 四種單例模式詳解及實例

    IOS Swift3 四種單例模式詳解及實例

    這篇文章主要介紹了IOS Swift3 四種單例模式詳解及實例的相關(guān)資料,這里對四種單例模式進行了實例介紹 ,需要的朋友可以參考下
    2016-12-12
  • iOS 禁止按鈕在一定時間內(nèi)連續(xù)點擊

    iOS 禁止按鈕在一定時間內(nèi)連續(xù)點擊

    本文主要介紹了iOS中禁止按鈕在一定時間內(nèi)連續(xù)點擊的方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • IOS實現(xiàn)郵箱模糊匹配的功能

    IOS實現(xiàn)郵箱模糊匹配的功能

    在一些App的訂單填寫頁,輸入用戶郵箱有個提示郵箱后綴的功能,很好用!還可以根據(jù)各個郵箱類型用戶量來做一個優(yōu)先級的匹配哦。這個功能該如何實現(xiàn)呢,下面來一起看看。
    2016-08-08

最新評論