如何以编程方式强制EGORefreshTableHeaderView更新

时间:2012-05-17 10:26:55

标签: iphone objective-c ios uitableview refresh

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

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

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

2 个答案:

答案 0 :(得分:9)

您是否尝试使用egoRefreshScrollViewDataSourceStartManualLoading

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

[_refreshTableHeaderView egoRefreshScrollViewDataSourceStartManualLoading:self.tableView];

适合我...


所以,自从我使用它以来已经太久了,我忘了我自己应用了这个改变......

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

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

实施(在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 为伟大的工作!)

答案 1 :(得分: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];
    }
}