#iphone #uitableview
#iPhone #uitableview
Вопрос:
Многие проекты iPhone используют шаблон «Подтягивания для обновления» для загрузки большего количества результатов (обычно новых данных с сервера.
В моем проекте я хочу сделать прямо противоположное: «подтягивание для обновления». Я хочу загрузить старые данные с сервера, но мне нужно, чтобы пользователь запрашивал данные, отображающие UITableView.
Как я могу это сделать? Кто-нибудь может мне помочь?
Ответ №1:
Вот что я использовал:
Прежде всего, у вас есть представление, содержащее «Подтянуть, чтобы обновить сообщение», и назначить его:
[pullUpView setFrame:CGRectMake(0, [tableView rectForFooterInSection:0].origin.y, [tableView bounds].size.width,pullUpView.frame.height)];
Затем вы настраиваете два метода делегирования, как показано ниже, для отслеживания перетаскивания.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.isDragging) {
CGFloat thresholdToRelease = [pullUpView frame].origin.y - [scrollView bounds].size.height;
CGFloat thresholdToLoad = thresholdToRelease [pullUpView frame].size.height;
if (([scrollView contentOffset].y >= thresholdToRelease) amp;amp; ([scrollView contentOffset].y < thresholdToLoad)) {
[pullUpView reset];
} else if ([scrollView contentOffset].y >= thresholdToLoad) {
[pullUpView indicateThresholdRearched];
}
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
CGFloat thresholdToAction = [pullUpView frame].origin.y [pullUpView frame].size.height - [scrollView bounds].size.height;
if ([scrollView contentOffset].y >= thresholdToAction) {
if (!performingAction) {
[pullUpView startLoading];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[tableView setContentInset:UIEdgeInsetsMake(0, 0, [pullUpView frame].size.height, 0)];
[UIView commitAnimations];
/* do your things here */
performingAction = YES;
}
}
}
В конце измените набор содержимого TableView, чтобы скрыть pullUpView.
Комментарии:
1. Отлично! Большое вам спасибо! Просто несколько вопросов о вашем коде: Можете ли вы объяснить мне, что делают методы [сброс pullUpView]. [pullUpView указывает на то, что он загружен], [pullUpView запускает загрузку]?
2. И последний вопрос: должен ли я добавить его в свой TableView с помощью [self.TableView addView: pullUpView]? (TableView — это мой UITableView IBOutlet, добавляемый в UIViewController)
3. Это имена методов, скопированные из github.com/enormego/EGOTableViewPullRefresh . Чтобы отразить состояние действия «вытягивания».
4. Да. Я использую [TableView addSubview: pullUpView].
5. Как вы объявляете pullUpView?
Ответ №2:
«Подтягивание для обновления» звучит немного странно, особенно если таблица занимает более одного экрана. Но если вы действительно хотите это сделать, ознакомьтесь с библиотекой с открытым исходным кодом Three20. Там вы найдете функцию «подтягивания для обновления», и вы можете просто адаптировать ее в соответствии с вашими потребностями.