从 UITableView 的子类访问 UIScrollViewDelegate

Posted

技术标签:

【中文标题】从 UITableView 的子类访问 UIScrollViewDelegate【英文标题】:Access UIScrollViewDelegate from subclass of UITableView 【发布时间】:2011-11-02 18:05:10 【问题描述】:

我正在做一个项目,我必须大量使用 UITableViews。所以,我想检测表视图 (UIScrollView) 是否正在滚动。

首先我使用 UIViewController 中的 UIScrollViewDelegate 处理它,其中我的 UITableView 被添加为子视图。现在,为了保持代码干净,我想继承 UITableView 并且在这个类中我必须访问 UIScrollView 的委托方法,例如- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView.

但是我该怎么做呢?有可能吗?

【问题讨论】:

【参考方案1】:

您所要做的就是实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView 委托并检测滚动是否发生在您的UITableView 或其他地方。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    if(scrollView == self.tableView)
    
        //your logic here
    
    return;

【讨论】:

@qPaul 这需要放在你实现了UITableView 代码的.m 文件中。【参考方案2】:

那些UIScrollViewDelegate 方法必须在一个类中定义,该类是您要处理滚动更改的tableview 的委托。如果你把这些方法放在你的 UITableView 子类的实现文件中,那么你应该将 tableview 的委托设置为它自己:

[self setDelegate:self];

但是您还必须在 UITableView 子类中定义您的 UITableViewDelegateUITableViewDataSource 方法。如果您想在项目中不止一处使用UITableView 子类,这可能会使事情复杂化。如果我是你,我会仔细考虑我的设计并做出相应的行为。

【讨论】:

以上是关于从 UITableView 的子类访问 UIScrollViewDelegate的主要内容,如果未能解决你的问题,请参考以下文章

将动画构建到UITableView的子类中

如何从 UIView 子类调用 UIViewController?

UITableView 上的 UIAccessibility 实现

将 UITableView 委托和数据源从 tableViewController 中分离出来

如何子类化 UITableView?

使用 UITableView 子类化 UIViewController