JTSSemanticReload 1.0.1

JTSSemanticReload 1.0.1

测试测试
语言语言 Objective-CObjective C
许可证 MIT
发布最新发布2014年12月

Jared Sinclair 维护。



  • 作者:
  • Jared Sinclair

在 UITableViewController 中调用 "reloadData" 仍保留语义内容偏移的分类方法。

为什么需要这个功能

很多时候您 想使用带有动画的表格视图更新,但您 确实 想插入比当前内容偏移量上方的行。使用 reloadData 的问题在于它丢失了用户在内容中的当前位置。在这些情况下,应使用 JTSSemanticReload 分类。

使用方法

在需要使用

- (void)reloadData;

的地方,代替为

- (void)JTS_reloadDataPreservingSemanticContentOffset:(JTSSemanticReloadItemForIndexPath)itemForPathBlock
                                     pathForItemBlock:(JTSSemanticReloadIndexPathForItem)pathForItemBlock;

以下是示例实现

- (void)someDataModelDidUpdate:(id)model andStuff:(id)stuff {

  [self JTS_reloadDataPreservingSemanticContentOffset:^id(NSIndexPath *indexPathPriorToReload, UITableViewCell *cellPriorToReload) {
    return (SomeTweet *)[cellPriorToReload tweet];
  } pathForItemBlock:^NSIndexPath *(id dataSourceItem) {
    return [self.tweetController indexPathForTweet:(SomeTweet *)dataSourceItem];
  }];
}

此方法接受两个块参数。这两个块是同步调用的,可多次调用。其中一个取前一个 NSIndexPathUITableViewCell,并返回数据源项。另一个取数据源项并返回新的/当前的 NSIndexPath。数据源项可以是您希望的任何对象。是否有能力从数据源项中衍生化新的索引路由,反之亦然,取决于您的应用程序。例如,如果您正在编写一个 Twitter 客户端,数据源项可能是一条推文。

此方法与非零内容内边距的表格视图一起使用是安全的,包括头部视图和脚部视图。