Возможно ли добавить UIRefreshControl
в нижней части UITableView
? Я бы использовал его для загрузки большего количества данных. Пожалуйста, предложите?UIRefreshControl в нижней части UITableView iOS6?
ответ
Я считаю, что не будет никакого простого решения этой проблемы. Может быть, кто-то может написать отдельную библиотеку для реализации этого поведения, и это вызовет больше осложнений после того, как вы будете кэшировать данные в tableview.
Но давайте разберем проблему, и это может помочь вам в достижении того, чего вы хотите. Я использовал следующий код для добавления дополнительных строк в приложении:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
if (endScrolling >= scrollView.contentSize.height)
{
NSLog(@"Scroll End Called");
[self fetchMoreEntries];
}
}
Или вы могли бы сделать что-то вроде этого:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
{
if (!self.isMoreData)
{
self.MoreData = YES;
// call some method that handles more rows
}
}
}
Вы, наверное, видели такие методы во многом вопросе, как я описал выше и, конечно же, не то, о чем вы просили. Но то, что вы можете сделать, заключается в том, что в то время как приведенный выше код загружает больше данных, вы можете добавить subview и показать несколько изображений, похожих на то, что предлагает UIRefreshControl. Добавьте изображения в подвью, чтобы они отображались как прогресс, пока не будет выполнен предыдущий код. Это помогает.
Кстати, я предлагаю вам не делать этого, поскольку он просто потратит ваше время на то, чтобы сделать что-то настолько маленькое, если вы просто не делаете его для учебных целей.
На самом деле, бесплатная система Sensible TableView обеспечивает эту функциональность из коробки. Вы указываете номер партии и автоматически загружаете данные, отображая последнюю ячейку как ячейку «загрузить больше». Когда вы нажмете эту ячейку, она автоматически загрузит следующую партию и так далее. Стоит взглянуть.
Вы можете использовать UIView для настройки вашего refreshControl внизу. Создайте UIView и добавьте его в UITableView как footerView.
UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
[footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"refreshImage.png"]]];
tableView.tableFooterView = footerView;
Скрыть это: tableView.tableFooterView.hidden = YES;
Реализовать UIScrollView делегата -
(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
{
tableView.tableFooterView.hidden = NO;
// call method to add data to tableView
}
}
перед добавлением данных в Tableview сохранить текущее смещение по CGPoint offset = tableView.contentOffset;
reloadData вызова затем установить ранее сохраненный смещение обратно Tableview [tableView setContentOffset:offset animated:NO];
Чтобы вы могли почувствовать новые данные, добавленные снизу.
Недавно я столкнулся с той же проблемой и написал категорию для класса UIScrollView. Здесь CCBottomRefreshControl.
Имеет ReactiveCocoa зависимость, поэтому он бесполезен. –
Работал отлично для меня. Все подходы, использующие методы UIScrollViewDelegate, - это боль в заднице в отношении производительности. Этот метод использует элемент UIRefreshControl по умолчанию, который намного лучше, чем любой другой подход, с которым я столкнулся. – marcelosalloum
Но у меня проблема. Я не могу удалить UIRefreshcontroller после загрузки данных. [refreshController endRefreshing] ничего не делает. –
Для UITableView я предлагаю следующий подход:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// if this is the last row that we have in local data
// and we didn't reach the total count of rows from the server side
if (count == indexPath.row+1 && count < total)
{
// .. fetch more rows and reload table when data comes
}
}
Я не использовал методы просмотра прокрутки намеренно, так как вид прокрутки медленно. Происходит прокрутка прокрутки, мы запрашиваем больше данных, обновляем больше строк, а прокрутка пока еще не завершена с помощью прокрутки, она все равно замедляется и создает проблемы с получением дополнительных данных.
, пожалуйста, объясните вкратце @Prcela –
Следующий ответ приведен в Xcode 8 и Swift 3.
первым объявить
var spinner = UIActivityIndicatorView()
чем в viewDidLoad
методе написать следующий код:
spinner = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
spinner.stopAnimating()
spinner.hidesWhenStopped = true
spinner.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60)
tableView.tableFooterView = spinner
теперь, наконец override
метод scrollViewDidEndDragging
Делегат следующее:
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let offset = scrollView.contentOffset
let bounds = scrollView.bounds
let size = scrollView.contentSize
let inset = scrollView.contentInset
let y = offset.y + bounds.size.height - inset.bottom
let h = size.height
let reloadDistance = CGFloat(30.0)
if y > h + reloadDistance {
print("fetch more data")
spinner.startAnimating()
}
}
Это самый правильный ответ на этот год. Я использую CCBottomRefreshControl, пока мне не пришлось выполнить мой проект до версии 3.0, и он повредился повсюду. Это гораздо лучшее решение. Спасибо! –
Человек, ты спас мой день. Это лучшее решение для быстрого 3 –
- 1. Как добавить UIRefreshControl в нижней части UITableView?
- 2. UITableView перетаскивание с UIRefreshControl
- 3. UITableView и UIRefreshControl не
- 4. UIRefreshControl в нижней части UICollectionView (загрузить больше данных)
- 5. В нижней части UITableView есть пустая область
- 6. Программно Добавить UIView в нижней части UITableView
- 7. Как выровнять UITableViewCell в нижней части UITableView?
- 8. AutoLayout. Stick UITableView в нижней части UIScrollView
- 9. Как удалить UITableViewCell в нижней части UITableView.
- 10. UITableView странное дополнение в нижней части ячейки
- 11. Загрузить UICell в нижней части UITableView
- 12. UIRefreshControl & UiTableview Content Inset
- 13. UIRefreshControl и UITableView backgroundview
- 14. UITableView Мигания с UIRefreshControl
- 15. Прокрутка к нижней части UITableView (UITableView находится в UITableViewCell)
- 16. Сделать палку UIButton на нижней части UITableView
- 17. Как добавить подпункт к нижней части UITableView?
- 18. Как добавить ярлык в нижней части ODRefeshControl
- 19. Как сделать пространство в нижней части UITableView в UITableViewController
- 20. UITableView addcell в нижней части в режиме редактирования
- 21. Использование UIRefreshControl в iOS6, но не в iOS5
- 22. UITableView tableFooterView с экрана для iOS6?
- 23. UITableView дополнительное пространство в нижней
- 24. Как показать «тянуть-для-обновления» элемента в нижней части UITableView в Swift
- 25. Использование UIRefreshControl в UIViewController с UITableView
- 26. Отключить нижний отскок в UITableView с UIRefreshControl
- 27. UIRefreshControl не работает для UITableView в popover
- 28. Надежный способ прокрутки в нижней части UITableView с footerview
- 29. UITableView, сделать нижний колонтитул в нижней части экрана?
- 30. Как вставить кнопку в нижней части каждого раздела UITableView?
Пожалуйста заявить о своей связи с эта структура (если таковая имеется) на момент, когда это читается, как будто это может быть спам. – ChrisF
Ни при каких обстоятельствах! Просто огромный поклонник! – Matt
Я понял, что это - но другие могут и нет. – ChrisF