我正在尝试强制EGORefreshTableHeaderView
从代码更新。当我拉下来时,一切都很完美,TableView
(root)会刷新。但我有一个模态视图,用户可以在其中订阅某些实体。当他订阅一个时,第一个(根)表视图中的重载方法被触发。此方法建立与服务器的连接,根据订阅加载某些特定数据,将其存储在CoreData DB
中并更新TableView
(根)。
问题在于,当用户仅连接到3G或Edge网络时,在自己的线程中处理的下载可能需要几秒钟。为了表明用户发生了某些事情,我想展示EGORefreshTableHeaderView
。
我发现我可以设置刷新视图的缩进并手动显示加载图标,但我想知道是否通过触发EGORefreshTableHeaderView
上的委托或方法没有更简单的解决方案? / p>
答案 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];
}
}