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

Posted

技术标签:

【中文标题】如何以编程方式强制 EGORefreshTableHeaderView 更新【英文标题】:How to programmatically force EGORefreshTableHeaderView to update 【发布时间】:2012-05-24 22:13:03 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您是否尝试过使用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] ...github.com/enormego/EGOTableViewPullRefresh 谢谢。我也以类似的方式尝试过,但你的效果更好。此外,我已经重写了动画以阻止动画,因为我猜自 ios5 以来不推荐使用 commitAnimations。但无论如何:谢谢! :) Mh... 我发现当 TableView 包含更多单元格作为其高度时它不起作用。然后 RefreshView 被触发但未显示,因为用户必须向上滚动才能看到它。你有什么建议吗? :// 我已经找到了。如果有人需要,请参阅下面的答案。【参考方案2】:

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

【讨论】:

以上是关于如何以编程方式强制 EGORefreshTableHeaderView 更新的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式强制在 UISearchBar 中进行搜索?

在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?

如何强制显示移动 Safari 底部导航栏以编程方式显示?

如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?

如何以编程方式将IAsyncOperation强制为错误状态?