如何以编程方式强制 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 更新的主要内容,如果未能解决你的问题,请参考以下文章
在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?
如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?