5

Mam niestandardowy widok kolekcji poziomej, który ma 1 wiersz i chcę dodać funkcję przeciągania w celu odświeżenia, która domyślnie pojawia się nad moim rzędem komórek. Chciałbym, aby użytkownik mógł pobrać widok kolekcji od lewej do prawej, aby aktywować UIRefreshControl. Jakieś pomysły?Pozioma UICollectionView z UIRefreshControl

Z góry dziękuję.

Odpowiedz

1

Do tego trzeba wdrożyć metodę 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

Dzięki za powyższy kod. Wystarczy wspomnieć, że działa, gdy chcesz załadować więcej danych po osiągnięciu końca przewijanego widoku tabeli/kolekcji, a nie na górze. – hyd00

5

Zasadniczo odpowiedź powyżej mówi ci, jak to zrobić w Objective-C ładunek więcej w UICollectionView. Uważam jednak, że chodziło o to, jak przeciągnąć, aby odświeżyć poziomo na tym komponencie.

Nie sądzę, można dodać UIRefreshControl poziomo, ale biorąc pod uwagę poprzedni kod i dokonywania konwersji do Swift wpadłem na następujący

nie zapomnij, aby ustawić UICollectionView własność odrzuceń TO PRAWDA

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 
     }) 
    } 
} 

również i w celu uniknięcia problemów z ciągłym ciągnąc dodałem trochę kodu do usunięcia odbijając tymczasowo, animować de zwój z powrotem w prawo, a następnie umożliwienie znowu podskakują. Da ci to ten sam efekt co UIRefreshControl.

Wreszcie, jeśli chcesz mieć ikonę ładowania moja propozycja jest taka, aby dodać go za kontrolera więc można wyciągnąć można zobaczyć go za

1

wystarczy dodać wersję Obj-C odpowiedzi Julio Bailon, który działa do wyciągania kolekcji Widok z jej góry, tj. od lewej do prawej:

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"); 

    }