iPhone项目需要“上拉刷新”功能

时间:2011-10-07 07:51:13

标签: iphone uitableview

许多iPhone项目使用“Pull-to-Refresh”模式来加载更多结果(通常是来自服务器的新数据。

在我的项目中,我想做的恰恰相反:“拉起来刷新”。我想从服务器加载旧数据,但我需要用户请求提取UITableView的数据。

我该怎么办?有人能帮助我吗?

3 个答案:

答案 0 :(得分:8)

以下是我一直在使用的内容:

首先,您有一个视图,其中包含“拉起刷新消息”,并将其分配给:

[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) && ([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的contentInset以隐藏pullUpView。

答案 1 :(得分:0)

“拉起来刷新”听起来有点奇怪,特别是如果桌子长度超过一个屏幕。但如果你真的想这样做,请查看Three20开源库。在那里你会找到“下拉刷新”功能,你可以根据自己的需要进行调整。

答案 2 :(得分:0)

转到此链接。我想你得到你的回答

https://github.com/enormego/EGOTableViewPullRefresh