You can add UIRefreshControl
to UICollectionView
(or any UIScrollView
for that matter) by adding it to collection's subviews:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];
This doesn't work when collection view layout has UICollectionViewScrollDirectionHorizontal
.
I tried overriding layoutSubviews
to put refresh control to the left, but it wouldn't track scrolling progress this way. Can I trick it into working with horizontal layouts?
I couldn't find any existing solutions so I extended ODRefreshControl
with horizontal layout support:
I needed solution in MonoTouch (C#) so I started by source-porting ODRefreshControl and then patched it to work with horizontal layout.
Full C# source code is here, it should be straightforward to port it back to Objective C.
All I did was add an utility function and some conditions here and there.
you can achieve this by implementing the UIScrollViewDelegate method
- (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");
}
}