UICollectionViewController中的Pull-to-refresh

mjh*_*mjh 73 uikit ios6 pull-to-refresh

我想UICollectionViewController在iOS 6下实现pull-down-to-refresh .这很容易实现UITableViewController,如下所示:

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
    forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
Run Code Online (Sandbox Code Playgroud)

以上实现了一个漂亮的液滴动画作为本机小部件的一部分.

由于UICollectionViewController"更加进化",UITableViewController人们会期待某种功能的奇偶性,但我无法在任何地方找到参考来实现这一点的内置方式.

  1. 有一种简单的方法可以做到这一点,我忽略了吗?
  2. 可以UIRefreshControl用某种方式使用UICollectionViewController,尽管报头和文档都指出它的意思与表视图中使用?

mjh*_*mjh 215

(1)和(2)的答案都是肯定的.

只需添加一个UIRefreshControl实例作为子视图,.collectionView它就可以了.

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
    forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];
Run Code Online (Sandbox Code Playgroud)

而已!我希望在某个地方的文档中已经提到过这一点,尽管有时一个简单的实验可以解决问题.

编辑:如果集合不够大,无法使用活动滚动条,则此解决方案将无效.如果你添加这个声明,

self.collectionView.alwaysBounceVertical = YES;
Run Code Online (Sandbox Code Playgroud)

一切都很完美.此修复取自同一主题的另一篇文章(在其他发布的答案的评论中引用).

  • 我必须指出UIRefreshControl.alloc.init滥用点符号.点符号用于表示访问内部状态,而括号表示用于表示您希望对象执行某些操作. (51认同)
  • @JuanGonzález:将控件设置为iVar,ala`_refreshControl = blah`,然后在`startRefresh:`中,当工作完成时,执行`_refreshControl endRefreshing];`. (2认同)

djb*_*jbp 18

我在寻找相同的解决方案,但在Swift中.基于以上答案,我做了以下工作:

let refreshCtrl = UIRefreshControl()
    ...
refreshCtrl.addTarget(self, action: "startRefresh", forControlEvents: .ValueChanged)
collectionView?.addSubview(refreshCtrl)
Run Code Online (Sandbox Code Playgroud)

不要忘记:

refreshCtrl.endRefreshing()
Run Code Online (Sandbox Code Playgroud)


har*_*nsa 7

我在使用Storyboard并且设置self.collectionView.alwaysBounceVertical = YES;不起作用.选择BouncesBounces Vertically为我完成工作.

在此输入图像描述