繁体   English   中英

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

[英]How to programmatically force EGORefreshTableHeaderView to update

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

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

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

你尝试过使用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了伟大的工作!)

感谢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];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM