如何修剪我的UITableViewController,使其始终只显示最后10行?

时间:2017-05-06 00:05:00

标签: swift uitableview swift3

目前在我的Swift应用中,我有一个UITableViewController。当用户滚动到表格的顶部时,我已经实现了分页 - 它会加载更多数据并填充表格。

但是现在我想要应用另一个功能 - 当用户滚动到表格的最底部时,它应该截断之前添加的行,这要归功于分页并且只留下最后10个单元格。

到目前为止,我的代码看起来像这样:

override func tableView(_ tview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.row == 0 { // first cell
        print("this is first cell - it works")
        loadMoreItems()
    }

    if indexPath.row == messages.count - 1 { // last cell
        if(self.messages.count > 10){
            leaveTenVisibleMessages()
        }
    }

    let cell = tview.dequeueReusableCell(withIdentifier: "chat") as! SingleCommentCell
    let msg = self.messages[indexPath.row]

    .
    .
    .

,方法leaveTenVisibleMessages如下所示(到目前为止):

func leaveTenVisibleMessages(){
    print("last cell before \(self.messages.count)")
    if(self.messages.count > 10){
        self.messages = Array(self.messages.suffix(10))
    }
    print("last cell after \(self.messages.count)")
    //tview.reloadData()
}

然而,即使我看到修剪阵列有效:

last cell before 11
last cell after 10

我经常收到错误:

fatal error: Index out of range

我认为原因是cellforrow在运行时需要数组messages中的10个以上的条目。我怎么才能刷新10行呢?

我刚检查过,问题出在这一行:

let msg = self.messages[indexPath.row]

e.g。我的代码引用indexPath.row = 29messages数组只有10条记录

1 个答案:

答案 0 :(得分:0)

检查返回numberOfRowsInSection的代码。

e.g。

func tableView(
    _ tableView: UITableView,
    numberOfRowsInSection section: Int) -> Int
{
    let result = self.messages.count

    NSLog("numberOfRowsInSection = %d", result)

    return result
}