Проектам iPhone требуется функция «Подтягивания для обновления»

#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. Там вы найдете функцию «подтягивания для обновления», и вы можете просто адаптировать ее в соответствии с вашими потребностями.