为同一类中的 2 个不同 UIScrollView 设置委托

Posted

技术标签:

【中文标题】为同一类中的 2 个不同 UIScrollView 设置委托【英文标题】:Setup delegates for 2 different UIScrollViews in the same class 【发布时间】:2017-08-24 23:16:07 【问题描述】:

我的班级中有一个 UIScrollView 和一个 UITableView(技术上也是一个 UIScrollView)。我将类设为 UIScrollViewDelegate,以便在激活 scrollViewDidScroll 方法时运行一些代码。问题是当滚动视图和 tableView 都滚动时运行此代码,但我不希望出现这种情况。

有什么办法可以将它们分开吗?我在网上查看并试图找到一种方法将滚动视图委托设置为除 self 之外的任何内容,但没有成功。谁能告诉我如何做到这一点或任何其他可能的解决方案?

【问题讨论】:

你可以使用标签 【参考方案1】:

可以查看是哪个对象调用了委托方法,UIScrollViewDelegate上的所有方法都将对象作为参数ej传递:

func scrollViewDidScroll(_ scrollView: UIScrollView)
func scrollViewDidZoom(_ scrollView: UIScrollView)
func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)

等等,你需要通过example

做一个简单的检查
func scrollViewDidScroll(_ scrollView: UIScrollView)
 
   if(scrollView == self.yourTableView)
   
     debugPrint("is tableView")
   

   if(scrollView == self.yourScrollView)
   
     debugPrint("is scrollView")
   

希望对你有帮助

【讨论】:

谢谢!不敢相信这不是我来的。 欢迎您@MahdiAleali,我很高兴能帮助您,如果不打扰您,请点赞我的回答,谢谢【参考方案2】:

当滚动表格视图时,您的 scrollViewDidScroll 被调用,我有点惊讶。

无论如何,您可以使用此限制您的支票

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

    if (scrollView == myScrollView) 
    //this is my scrollview do something cool here
   

【讨论】:

非常感谢!

以上是关于为同一类中的 2 个不同 UIScrollView 设置委托的主要内容,如果未能解决你的问题,请参考以下文章

29 类中的函数重载

类中的函数重载

java问题:请问同一个类中可以有2个名字相同的函数吗?为啥啊?

自定义 uitableviewcell 中的 uiscrollview

同一个rpc类中的接口方法可以相互调用但是不同rpc类中的接口方法不可以相互调用

我的 UIScrollView 助手类中的泄漏