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

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

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

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

【问题讨论】:

    标签: iphone objective-c ios uitableview refresh


    【解决方案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];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2020-08-11
      • 1970-01-01
      • 2020-08-11
      • 2015-06-10
      相关资源
      最近更新 更多