支持 UITableView 的自定义 UIScrollView

Posted

技术标签:

【中文标题】支持 UITableView 的自定义 UIScrollView【英文标题】:Custom UIScrollView backing a UITableView 【发布时间】:2015-01-09 23:58:15 【问题描述】:

我想在几个不同的地方使用一些自定义滚动行为。假设滚动视图应该提供以下三种行为:

在用户滚动时更改颜色,具体取决于内容偏移量。 公开显示在背景中的 imageView 属性。消费者可以设置图片。 在内容偏移量超过某个固定值时通知代理。

我有一个使用UIScrollView 子类的工作实现。但现在我想在UITableView 中使用相同的功能,这当然是由标准UIScrollView 支持的。

如何在两个地方重复使用相同的代码?到目前为止,我最接近的是关闭 tableview 的滚动并强制其高度始终匹配其内容大小。然后我可以像任何其他视图一样将它添加到我的自定义滚动视图中。这可行,但有一些缺点。

我可以使用类别来实现吗?协议?我可以以某种方式“换掉”UITableView 的滚动视图吗?还有其他我可能忽略的技术吗?

【问题讨论】:

【参考方案1】:

我有一个想法给你。

为实现 UIScrollViewDelegate 方法创建一个类 - 假设(当然选择更好的名称...):

@interface ScrollViewDelegateHelper : NSObject <UIScrollViewDelegate>

创建一个类来实现所有 UITableViewDelegate 方法(当然还有 dataSource 方法,如果你喜欢的话),比方说:

@interface TableViewDelegateHelper : ScrollViewDelegateHelper <UITableViewDataSource, UITableViewDelegate>

TableViewDelegateHelper 扩展了ScrollViewDelegateHelper,所以所有的滚动事件都可以写在一个文件中。 您可以在这两种情况下使用 ScrollViewDelegateHelper,一次作为自定义 UIScrollView 的委托,第二次作为 TableView 委托的父级

希望对您有所帮助。

【讨论】:

以上是关于支持 UITableView 的自定义 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 滚动时有两个不同的自定义单元格重叠

UICollectionViewCell 内带有 UITableView 的自定义单元格

在 UITableView 中定义高度的自定义 UITableViewCell

分组 UITableView 上的自定义背景图像

UITableView 之上的自定义手势

UITableView 的自定义滚动条