APLPullToRefreshContainer 1.0.2

APLPullToRefreshContainer 1.0.2

由以下人员维护:Carsten SchlobohmTino RachuiMichael KamphausenStephan LernerChristine PühringerNico Schümann



  • Nico Schuemann

APLPullToRefreshContainer

安装

通过将此内容添加到 Podfile 中来使用 cocoapods 进行安装

pod "APLPullToRefreshContainer"

用法

APLPullToRefreshViewController 旨在用作嵌入您想要添加拉动刷新视图的视图控制器。

Storyboard

打开 Storyboard,创建一个新的视图控制器。将此视图控制器的 class 设置为 APLPullToRefreshContainerViewController

将容器视图拖动到这个视图控制器中,并为您的实际内容视图控制器创建一个嵌入 segue。将此 segue 命名为 aplContent。您可能希望将容器视图限制为 (0, 0, 0, 0) 以使其填充所有可用空间。不要限制为边距或安全区域,而是限制到父视图!

设置 APLPullToRefreshContainerViewController 的代理并实现所需的方法 aplPullToRefreshContainer:didTriggerPullToRefreshCompletion:

提示:确保设置您内容视图控制器中的 Automatically Adjust Scroll View Insets 属性。我们会确保所有内边距都按预期工作。

程序化

使用APLPullToRefreshContainerViewControllerembedContentViewController:方法程序化地添加您的视图控制器。

因为容器持有一个弱引用,你必须拥有传递的UIViewController实例。

您的内容视图控制器

通过名为aplContent的转场将内容视图控制器嵌入或通过embedContentViewController:添加,该控制器必须提供一个由容器观察的scrollView属性。为了与UITableView等操作,如果视图控制器的视图一个UIScrollView,则也会正常工作。如果不是,请提供一个scrollView属性。

  • 如果您不喜欢默认的刷新视图(它只是一个透明的视图,包含UIActivityIndicatorView),您可以在您的代理中实现aplPullToRefreshContainer:didInstallPullToRefreshView:来自定义默认外观。

对于更复杂的布局,请通过-aplPullToRefreshPullToRefreshViewForContainer:提供自定义视图。它可选择性符合APLPullToRefreshView协议。一定要为提供的视图设置一个高度约束(或使其具有内在高度),否则它将没有高度。

  • 当用户触发下拉刷新时,-aplPullToRefreshContainer:didTriggerPullToRefreshCompletion:将主线线程上调用。一次刷新完成后,您必须调用提供的非空完成处理器,以便我们能够为您删除下拉刷新视图并恢复contentInset等。

您的下拉刷新视图

您可以提供任何具有高度约束(或内在高度)的视图。它将以全宽添加。

符合APLPullToRefreshView可能很有用,因为

  • 一旦您的下拉刷新视图变得可见,-aplPullToRefreshProgressUpdate:beyondThreshold:将在视图的可视部分更改时被调用。您可以在下拉过程中使用这个值来对旋转、颜色更改等进行动画处理。参数值的范围是0...1,解释为线性百分比值。beyondThreshold参数表示在此点释放下拉刷新视图是否可以触发刷新。

  • 如果用户触发了下拉刷新,-aplPullToRefreshStartAnimating将被调用。您可以使用此来启动Activity Indicator等。

  • 一旦刷新的内容出现(并且内容视图控制器调用完成处理程序),就在“拉下来刷新”视图动画消失之前调用《em>-aplPullToRefreshStopAnimating。您可以忽略它,因为您很快就将被动画移除,或者停止任何仍在运行的动画。

生命周期

一旦平移手势达到过滚动区域,内容视图控制器就获取一个新的视图实例并立即显示。如果没有触发“拉下来刷新”:

  • 平移手势停止,也没有触发“拉下来刷新”

  • 或者,如果触发了“拉下来刷新”,一旦调用完成处理程序并且视图被动画移除。

保证最多只有一个“拉下来刷新”视图和一个“拉下来请求数据”视图存在。因为我们是友好的,所以请友好地调用提供的《em>completionHandler 函数,并且只调用一次。异步调用完成处理程序的实用模式可以是:

- (void)aplPullToRefreshContainer:(nonnull APLPullToRefreshContainerViewController *)container didTriggerPullToRefreshCompletion:(nonnull APLPullToRefreshCompletionHandler)completionHandler {
    _pendingPullToRefreshCompletionHandler = completionHandler;
    [_webView reload];
}

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    if (_pendingPullToRefreshCompletionHandler) {
        _pendingPullToRefreshCompletionHandler();
        _pendingPullToRefreshCompletionHandler = nil;
    }
}

多次调用完成处理程序是不确定的操作,可能会导致威胁生命等后果。

常见问题

如何暂时禁用“拉下来刷新”?

使用容器的《em>pullToRefreshEnabled属性。

变更日志

版本 1.0

  • 所有代理方法都已重命名并标记,以便在 Swift 中也能完美工作。
  • 现在不再支持从代理的 aplPullToRefreshPullToRefreshViewForContainer: 方法返回 nil。请使用容器的 pullToRefreshEnabled 属性。