Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将行动态添加到UITableView_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 将行动态添加到UITableView

Ios 将行动态添加到UITableView,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我正在开发一个应用程序,它可以从一个web服务中获取一些消息,并通过页面返回这些消息。我最初显示第一页,但是如果用户想要向下滚动查看过去的消息,我应该请求下一页并获取消息。我的问题是,扩展表视图、将消息添加到数据源并将其加载到表中以便用户可以看到它们的最佳方式是什么 谢谢。您可以检测表视图何时接近底部。请求更多数据,然后将其加载到tableview的数据源中。(数组或您正在使用的任何东西)然后您只需重新加载tableview。行计数可以是您正在使用的数据源 我经常在我的应用程序中这样做 创建包含

我正在开发一个应用程序,它可以从一个web服务中获取一些消息,并通过页面返回这些消息。我最初显示第一页,但是如果用户想要向下滚动查看过去的消息,我应该请求下一页并获取消息。我的问题是,扩展表视图、将消息添加到数据源并将其加载到表中以便用户可以看到它们的最佳方式是什么


谢谢。

您可以检测表视图何时接近底部。请求更多数据,然后将其加载到tableview的数据源中。(数组或您正在使用的任何东西)然后您只需重新加载tableview。行计数可以是您正在使用的数据源


我经常在我的应用程序中这样做

创建包含一行的“加载更多”部分。在其中放置一个活动指示器。在本节的“cellForItem”中,在收到数据后发出请求并重新加载数据。

实现UIScrollView委托方法
scrollViewDidScroll
,检查表是否已滚动到接近底部,然后更新有助于数据源方法在表视图中流行的数组,并调用
重新加载数据

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    DLog(@"Did scroll: contentOffsetY: %f, contentHeight:%f", scrollView.contentOffset.y, scrollView.contentSize.height);

    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset + scrollViewHeight >= scrollContentSizeHeight)
    {
        // update your datasource/array that provides content to table view
        [yourTableView reloadData];
    }
}

您必须立即提供占位符,以便用户可以滚动,然后在后台线程中获取消息,然后返回主线程并重新加载表。可能重复我曾想过这一点,但我认为每次重新加载整个表不是很有效。我还查看了文档,找到了一些用于更新表的方法(self.tableView beginUpdates和endUpdates或类似的方法,以及indexPath中的insertRows)。关键是,我不知道做这件事的最佳方法是什么。我承认我的方法没有那么有效,可以改进。当我有时间的时候,我会研究一个更好的方法。如果你遇到一种有效的方法,我很有兴趣和你一起探索。我遇到了这篇使用这种方法的文章,请给我发电子邮件到alexandru。clapa@gmail.com我很乐意接受一种有效的方法与您进一步研究。我正在生产中使用这种方法,并且工作非常顺利,除非你真的遇到性能问题,否则我不会尝试进一步调查。虽然该博客做得很好,但它要求用户点击按钮/单元格以获取更多数据。我更喜欢滚动。当我的tableview位于底部时,我显示一个加载单元格并获取更多数据,用户知道应用程序正在获取更多数据。我发现这提供了更好的用户体验。非常接近我目前正在做的事情。尽管重新加载整个tableview并没有那么有效。它显示了大量的滚动。