2017-08-24 55 views
1

我在我的类中有一个UIScrollView和一个UITableView(技术上也是一个UIScrollView)。我让这个类是一个UIScrollViewDelegate,因此当scrollViewDidScroll方法被激活时它会运行一些代码。问题是,当滚动视图和tableView滚动时,这段代码被运行,但我不希望这是事实。在同一个类中为2个不同的UIScrollView设置代理

有什么办法可以分开这些吗?我在网上查找并试图找到一种方法来将滚动视图委托设置为除了自我之外的任何东西,但没有成功。任何人都可以告诉我如何做到这一点或任何其他可能的解决方案来解决这个问题?

+0

你可以使用 –

回答

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>) 

等等,你需要通过例如

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

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

希望这有助于

+0

谢谢标签限制你的支票! 不能相信这并没有到我这里来。 –

+1

欢迎@MahdiAleali我很高兴,帮助你请upvote我的答案,如果不打扰你,谢谢 –

1

我有点惊讶的是,你的scrollViewDidScroll被称为WH tableview被滚动。

不管怎么说,你可以使用这个

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    if (scrollView == myScrollView) { 
    //this is my scrollview do something cool here 
    } 
} 
+0

比你这么多! –

相关问题