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



我的类中有一个UIScrollView和一个UITableView(技术上也是UIScrollView(。我使该类成为UIScrollViewDelegate,因此当激活scrollViewDidScroll方法时,它将运行一些代码。问题是当滚动视图和表视图都滚动时,会运行此代码,但我不希望这种情况发生。

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

你可以检查哪个对象正在调用委托方法,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")
}
}

希望这有帮助

我有点惊讶你的scrollViewDidScroll在滚动表视图时被调用。

无论如何,您可以使用此限制您的检查

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == myScrollView) {
//this is my scrollview do something cool here
}
}

最新更新