在UITableView的顶部添加包含行的新部分(最近添加)

时间:2014-01-08 13:23:24

标签: ios iphone objective-c uitableview

我有一个UIViewController,其中包含UITableView,我生成了我想要的数据源,并将它们放在我的表中,没有任何问题。
我想要的是当我从服务器获取新数据时,我想在现有的tableview的顶部显示一个名为“最近添加”的部分。
  请注意,此新部分的行数可能会因服务器的内容而异。

我需要知道的是我应该如何以及在哪里放置一些代码来做这样的事情。它应该在tableView:cellForRowAtIndexPath中,我已经有一些细胞在那里出列了吗? 或者别的地方。

任何帮助将不胜感激。谢谢。

P.S:我理解使用dequeueReusableCellWithIdentifier我只能访问屏幕上的可见单元格而且我无法等到所有tableView都被加载。

2 个答案:

答案 0 :(得分:1)

你应该

  1. 更新您的数据源。我的意思是您用来在UITableView显示的数据。
  2. 为要插入的行和部分生成相应的NSIndexPath
  3. 致电insertRowsAtIndexPaths:withRowAnimation:以插入行和部分。
  4. 您可以在从服务器获取数据后执行此操作,并注意在主线程中执行此操作。

    示例代码:

    //discountArray contains data fetched from server.
    [self.discountArray addObjectsFromArray:discountArray];
    
    // Here I use my category to generate an array of NSIndexPath.
    NSArray *indexPathArray = [NSIndexPath indexPathsFrom:self.discountArray.count - discountArray.count
                                                       to:self.discountArray.count
                                                inSection:0];
    // Insert the rows with animation.
    [self.discountListTableView insertRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
    

答案 1 :(得分:1)

tableView:cellForRowAtIndexPath

您在哪里创建要显示的单元格,因此用户打开屏幕,此回调被调用X次并添加单元格。

如果您要创建系统,例如,每隔10秒检查一次服务器并下载新数据。然后你可能会创建新的单元格然后调用类似的东西:

tableview insertRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#>

然后更新您的数据源,或者您可以更新数据源并调用重新加载,以便重新运行tableView:cellForRowAtIndexPath回调,[tableView reloadData]