4

我试图强制EGORefreshTableHeaderView从代码更新。当我下拉一切正常并且TableView(根)刷新。但是我有一个模式视图,用户可以在其中订阅某些实体。当他订阅一个时,第一个(根)表视图中的 reload 方法被触发。此方法建立与服务器的连接,根据订阅加载一些特定数据,将其存储在 a 中CoreData DB并更新TableView(root)。

问题是当用户仅连接到 3G 或 Edge 网络时,在自己的线程中处理的下载可能需要几秒钟。为了向用户表明发生了什么事,我想显示EGORefreshTableHeaderView.

我发现我可以设置刷新视图的缩进并手动显示加载图标,但我想知道是否没有更简单的解决方案,只需在 ? 上触发委托或方法EGORefreshTableHeaderView

4

2 回答 2

9

你试过用egoRefreshScrollViewDataSourceStartManualLoading吗?

假设您的EGORefreshTableHeaderView实例名为 _refreshTableHeaderView,则调用如下:

[_refreshTableHeaderView egoRefreshScrollViewDataSourceStartManualLoading:self.tableView];

为我工作...


所以,我已经太久没有使用它了,我忘记了我自己应用了更改......

我修改EGORefreshTableHeaderDelegate(在 中声明EGORefreshTableHeaderView.h)以添加此附加协议:

- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView;

和实现(in EGORefreshTableHeaderView.m):

- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView {
    [self setState:EGOOPullRefreshLoading];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.2];
    scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f);
    [UIView commitAnimations];

    if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDidTriggerRefresh:)]) {
        [_delegate egoRefreshTableHeaderDidTriggerRefresh:self];
    }
}

如果您需要更多帮助,请告诉我。

(感谢enormego的出色工作!)

于 2012-05-17T11:03:03.943 回答
1

感谢 Reuven 和他的代码,我对它进行了一些改进,它也可以在屏幕更大的 UIScrollView 中使用。此外,我已将不推荐使用的动画更改commitAnimations为阻止动画。

#pragma mark - Manually refresh view update
- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView {
    [self.refreshHeaderView setState:EGOOPullRefreshLoading];

    //animating pull down scroll view
    [UIView animateWithDuration:0.2
                     animations:^{ 
                         scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f); 
                         scrollView.contentOffset = CGPointMake(0, -60.0f);
                     }
     ];

    //triggering refreshview regular refresh
    if ([self.tableView.delegate respondsToSelector:@selector(egoRefreshTableHeaderDidTriggerRefresh:)]) {
        [self egoRefreshTableHeaderDidTriggerRefresh:self.refreshHeaderView];
    }
}
于 2012-05-18T08:42:34.503 回答