如何检测 UITableView 标题何时滚动?

Posted

技术标签:

【中文标题】如何检测 UITableView 标题何时滚动?【英文标题】:How to detect when UITableView header scrolls? 【发布时间】:2017-10-14 22:03:35 【问题描述】:

我目前有一个 UITableView,其 HeaderView 是 UIScrollView。我将其用作一种轮播,显示不断旋转的信息,每两秒触发一次计时器。我想要做的是检测用户何时自己移动了滚动视图。这是我现在必须处理 ScrollView 移动的代码。

override func viewDidLoad() 
    var myTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

func runTimedCode() 
    var itemCount = newsArray.count // how many items are in the news reel
    if currentPage < itemCount 
        let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position
        featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true)
        currentPage += 1
     else 
        // end of items
        currentPage = 0
        let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position
        print("new x = \(newX)")
        featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true)
    

然而,scrollViewDidScroll 函数只在 tableview 移动时被调用。有什么方法可以检测tableView上方的ScrollView何时滚动?我完全坚持这一点,任何帮助表示赞赏。谢谢!

【问题讨论】:

你设置了滚动视图的代理吗? @koropok facepalm...我完全忘记了。这解决了这个问题。我想我的下一个问题是如何区分何时滚动 tableView 和何时滚动 ScrollView? 你看过这个吗?不确定这是否是一个解决方案,但我认为答案可能是这个的派生词。 ***.com/a/7706175/4475605 这是另一个有趣的。 ***.com/a/41124033/4475605 【参考方案1】:

首先,确保您已设置委托,以便您的视图控制器从滚动视图和表格视图中获取事件。

接下来,保留引用以确保您可以区分这两个视图。

最后,检查哪个引用触发了 viewdidscroll 函数并在那里编写代码。

let view1:UIScrollView!
let view2:UITableView!

view1.delegate = self
view2.delegate = self

func scrollViewDidScroll(_ scrollView: UIScrollView) 
    if scrollView == view1 
        // Do something
    
    if scrollView == view2 
        // Do something
    

【讨论】:

这非常有效,谢谢。不敢相信我没有想到这一点

以上是关于如何检测 UITableView 标题何时滚动?的主要内容,如果未能解决你的问题,请参考以下文章

对于这种边缘情况,如何检测何时从 iOS 的 uitableview 中删除单元格?

UICollectionView:如何检测滚动何时停止

Android:如何检测滚动何时结束

如何检测 UITableView 滚动?

如何检测 UITableView 仅在 iOS 中向下滚动?

检测用户何时将手指从 UIScrollView 上移开