Есть ли горизонтальный UIRfreshControl?

Вы можете добавить UIRefreshControl к UICollectionView (или любому UIScrollView в этом отношении), добавив его в подпредставления коллекции:

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

Это не работает, когда макет представления коллекции имеет UICollectionViewScrollDirectionHorizontal.

Я попытался переопределить layoutSubviews, чтобы поместить элемент управления обновлением слева, но таким образом он не будет отслеживать ход прокрутки. Могу ли я заставить его работать с горизонтальными макетами?


person Dan Abramov    schedule 10.12.2012    source источник
comment
Может быть, я консервативен, но хотя вы можете добавить это представление таким образом и заставить его работать, я не думаю, что оно было разработано для этого, документация явно связывает его с UITableView.   -  person Daniel    schedule 11.12.2012
comment
@Daniel Хотя это правда, я вижу, что многие люди делают это таким образом, что заставляет меня чувствовать, что Apple, вероятно, сделает это де-факто официальным рабочим поведением. Я также не видел ни одного сообщения о том, что их приложение было отклонено за использование UIRefreshControl без табличного представления.   -  person Dan Abramov    schedule 11.12.2012


Ответы (2)


Я не смог найти никаких существующих решений, поэтому я расширил ODRefreshControl с поддержкой горизонтального макета:

введите здесь описание изображения

Мне нужно было решение на MonoTouch (C#), поэтому я начал с переноса исходного кода ODRefreshControl, а затем исправил его для работы с горизонтальной компоновкой.

Полный исходный код C# находится здесь. перенесите его обратно на Objective C.
Все, что я сделал, это добавил вспомогательную функцию и некоторые условия тут и там.

person Dan Abramov    schedule 12.12.2012
comment
Привет, не могли бы вы предложить свой код расширения с Objective-C? Благодарю вас! - person Leo; 14.11.2016
comment
@Dan Пожалуйста, предоставьте код, который вы сделали в Obj-C, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА - person Hyder; 30.01.2017

вы можете добиться этого, реализуя метод 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");

    }
}
person Nitin    schedule 23.04.2014