有水平的 UIRefreshControl 吗?

Posted

技术标签:

【中文标题】有水平的 UIRefreshControl 吗?【英文标题】:Is there a horizontal UIRefreshControl? 【发布时间】:2012-12-10 23:01:31 【问题描述】:

您可以通过adding it to collection's subviews 将UIRefreshControl 添加到UICollectionView(或任何UIScrollView):

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];

当集合视图布局具有 UICollectionViewScrollDirectionHorizontal 时,这不起作用。

我尝试覆盖layoutSubviews 将刷新控件放在左侧,但它不会以这种方式跟踪滚动进度。我可以欺骗它使用水平布局吗?

【问题讨论】:

也许我比较保守,但是尽管您可以通过这种方式添加此视图并使其正常工作,但我认为它不是为此而设计的,文档确实将其明确链接到 UITableView . @Daniel 虽然这是真的,但我看到这里有很多人这样做,这让我觉得 Apple 可能会将这种事实上的工作行为正式化。我也没有看到一篇帖子说他们的应用因使用 UIRefreshControl 而没有表格视图而被拒绝。 【参考方案1】:

我找不到任何现有的解决方案,所以我扩展了 ODRefreshControl 以支持水平布局:

我需要 MonoTouch (C#) 中的解决方案,因此我首先将源代码移植到 ODRefreshControl,然后使用水平布局移植 patched it to work。

完整的 C# 源代码是 here,应该可以直接将其移植回 Objective C。 我所做的只是在这里和那里添加一个实用函数和一些条件。

【讨论】:

您好,您能提供带有objective-c 的扩展代码吗?谢谢! @Dan 请提供您在 Obj-C 中制作的代码,请提供您的代码【参考方案2】:

您可以通过实现 UIScrollViewDelegate 方法来实现这一点

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
     CGPoint offset = scrollView.contentOffset;
     CGRect bounds = scrollView.bounds;
     CGSize size = scrollView.contentSize;
     UIEdgeInsets inset = scrollView.contentInset;
     float y = offset.x + bounds.size.width - inset.right;
     float h = size.width;


    float reload_distance = 75; //distance for which you want to load more
    if(y > h + reload_distance) 
       // write your code getting the more data
       NSLog(@"load more rows");

    

【讨论】:

以上是关于有水平的 UIRefreshControl 吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIRefreshControl 所需的路径更改为 UIControlEventValueChanged

我可以在初始加载视图时旋转 tableview UIRefreshControl(活动指示器),而无需用户向下滑动吗?

使用UIRefreshControl刷新表视图

如何在 UITableView 底部添加 UIRefreshControl?

UIRefreshControl 重复出现

如何自定义 UIRefreshControl 以使下拉高度低于默认值