2012-12-10 15 views
5

Możesz dodać UIRefreshControl do UICollectionView (lub dowolnej UIScrollView o to chodzi) przez adding it to collection's subviews:Czy istnieje pozioma kontrola UIRefreshControl?

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

ta nie działa, gdy układ widok kolekcji ma UICollectionViewScrollDirectionHorizontal.

Próbowałem przesłonić layoutSubviews, aby umieścić kontrolkę odświeżania w lewo, ale nie śledził w ten sposób postępów przewijania. Czy mogę go oszukać w pracy z układem poziomym?

+1

Może jestem konserwatywny, ale będąc choć można dodać ten pogląd w ten sposób, i zmusić go do pracy, nie sądzę, został zaprojektowany w tym celu dokumentacja wyraźnie łączy go z UITableView. – Daniel

+0

@Daniel Podczas gdy to prawda, widzę, że wielu ludzi robi to w ten sposób, co sprawia, że ​​Apple może sprawić, że faktyczne zachowanie będzie oficjalne. Nie widziałem też ani jednego postu mówiącego, że ich aplikacja została odrzucona z powodu użycia 'UIRefreshControl' bez widoku tabeli. –

Odpowiedz

7

nie mogłem znaleźć żadnych istniejących rozwiązań, więc przedłużony ODRefreshControl z poziomym wsparciu układ:

enter image description here

Potrzebowałem rozwiązanie w MonoTouch (C#), więc zacząłem od źródłowej Porting ODRefreshControl a następnie patched it to work z układ poziomy.

Pełna C# Kod źródłowy jest here, powinno być proste, aby go z powrotem do portu Objective C
Ja tylko dodać funkcję użytkową i pewne warunki tu i tam.

+1

Witam, czy mógłbyś podać swój kod wewnętrzny z celem c? Dziękuję Ci! – Leo

+0

@Dan Proszę podać kod, którego dokonałeś w Obj-C PROSZĘ PROSZĘ – hyd00

1

można to osiągnąć poprzez wdrożenie metody 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"); 

    } 
}