当用户滚动到UITableView的底部时触发web请求

时间:2009-12-08 18:57:22

标签: iphone objective-c uitableview uiactivityindicatorview

当用户滚动到UITableView的底部时,我试图让UIActivityIndi​​catorView“显示并动画显示”....

到达表格视图的底部后,会发出一个Web请求,需要几秒钟才能完成,然后UIActivityIndi​​catorView应该“停止并隐藏”

我正在使用tableView触发UIActivityIndi​​catorView的外观:willDisplayCell:forRowAtIndexPath:

列出项目

但问题是UIActivityIndi​​catorView直到整个方法(即tableView:willDisplayCell:forRowAtIndexPath :)被调用之后才出现在iPhone屏幕上,到那时它也已经隐藏了。

关于如何:

的任何想法
  1. 显示指标视图
  2. 发出网络请求
  3. 隐藏指标视图?
  4. 新线程?更好的方法?

    谢谢!

    具体来说,我的功能看起来像这个

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
        if (self.results && indexPath.row == [self.results count] - 1) {
            [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
            [self.loadingSignal startAnimating];
    
        /// make web request that will take a few seconds
    
            [self.loadingSignal setHidden:YES];
            [self.loadingSignal stopAnimating];
    
            }
        }
    }
    

2 个答案:

答案 0 :(得分:1)

好。从上面的代码片段中,我看到了一些问题:

  1. 您似乎计划在显示单元格之前等待请求完成。这有一些不利之处:它对用户来说很烦人,很可能在请求结束时冻结UI(可能需要几秒钟)。
  2. 一切都在willDisplayCell方法中发生。
  3. 以下是我认为你应该如何解决这个问题:

    1. 将显示单元格触发器异步加载
    2. 用旋转器显示一个单词“Loading ...”(请参阅​​Tweetie 2获取灵感)
    3. 等待您的请求回拨
    4. 使用回复填充模型
    5. 删除“正在加载...”单元格
    6. 强制重新加载您的数据[tableView reloadData]
    7. 这应该可以让你实现你想要做的事情。

答案 1 :(得分:1)

您可以尝试在UITableView的cellForRowAtIndexPath:方法中执行此操作