5

水平UICollectionView我有了1行中的定製水平收集觀點,我想補充拉刷新功能,它在默認情況下,會出現我上面的細胞行。我希望用戶能夠從左向右拉動集合視圖來激活UIRefreshControl。有任何想法嗎?與UIRefreshControl

在此先感謝。

回答

1

爲此,您需要實現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"); 

    } 
} 
+0

感謝您獲取上述代碼。只是想提及它適用於當您想要在滾動tableview/collectionview結束後加載更多數據,而非頂​​級時。 – hyd00

5

基本上上面的反應告訴你如何使用Objective-C做負載更多的UICollectionView。不過,我相信問題是如何在該組件上進行水平刷新。

我不認爲你可以水平增加UIRefreshControl但考慮到前面的代碼,使轉換到斯威夫特,我想出了以下一個

不要忘記設置您的UICollectionView反彈性質爲true

func scrollViewDidScroll(scrollView: UIScrollView) { 
    let offset = scrollView.contentOffset 
    let inset = scrollView.contentInset 
    let y: CGFloat = offset.x - inset.left 
    let reload_distance: CGFloat = -75 
    if y < reload_distance{ 
     scrollView.bounces = false 
     UIView.animateWithDuration(0.3, animations: {() -> Void in 
      scrollView.setContentOffset(CGPointMake(0, 0), animated: false) 
     }, completion: { (Bool) -> Void in 
      scrollView.bounces = true 
     }) 
    } 
} 

此外,爲了避免與連續拉問題我添加了一些代碼以刪除臨時彈跳,動畫德回捲到右側,然後再次啓用彈跳。這會給你與UIRefreshControl相同的效果。

最後,如果你想有一個加載圖標我的建議是將其添加的幕後控制人,所以當你拉你可以看到它背後

1

只是增加了Julio Bailon的答案,其工作的對象 - 版本用於將collectionView從其頂部即左至右拉動

CGPoint offset = scrollView.contentOffset; 
    CGRect bounds = scrollView.bounds; 
    CGSize size = scrollView.contentSize; 
    UIEdgeInsets inset = scrollView.contentInset; 
    float y = offset.x - inset.left; 
    float h = size.width; 


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

    }