如何避免重新加载整个表,破坏滚动

时间:2017-08-03 15:48:55

标签: ios swift uitableview

我想将元素数量限制为三个。当我添加元素四时,元素一应该消失。

如果我希望滚动继续正常,我应该通过调用UITableView告诉section我要删除整个deleteRowsAtIndexPaths零中的行。之后我需要告诉UITableView你在第三个section插入一堆行(段索引2)。

通过这种方式,您可以避免重新加载整个表格,从而中断滚动。

但不幸的是,这对我不起作用。

给我这个错误:

'attempt to delete row 3 from section 2, but there are only 1 sections before the update'

代码:

    //scrolling down time calling this method
    func oldestState(){
        //var students : [[Student]]? = [[],[],[]]
        let data = getdata()
        self.students?[(self.firstIndex+self.count) % (self.students?.count)!] = data
        if (self.count != 3) {
            self.count += 1
        } else {
            self.firstIndex = (self.firstIndex+1) % (self.students?.count)!
        }

        self.newsFeedTableView.beginUpdates()
        let indexPathsDeleted = (0..<(data
            .count)).map { IndexPath(row: $0, section: (self.students?.count)! - 1) }
        self.newsFeedTableView.deleteSections([0], with: UITableViewRowAnimation.automatic)
        self.newsFeedTableView.deleteRows(at: indexPathsDeleted, with: UITableViewRowAnimation.automatic)
        self.newsFeedTableView.endUpdates()

        self.newsFeedTableView.beginUpdates()
        let indexPathsInsert = (0..<(data
.count)).map { IndexPath(row: $0, section: (self.students?.count)! - 1) }
        self.newsFeedTableView.insertSections([2], with: UITableViewRowAnimation.automatic)
        self.newsFeedTableView.insertRows(at: indexPathsInsert, with: UITableViewRowAnimation.automatic)
        self.newsFeedTableView.endUpdates()
    }


    func getdata() -> [Student]{

        var _students = [Student]()
        for i in  itemNumber..<(itemNumber + 4) {
            let student = Student()
            student.name = "\(i)"
             print("adding student roll number : \(student.name)")
            _students.append(student)
        }
        itemNumber  +=  4
        return _students
    }
}

Here is full Git code :

1 个答案:

答案 0 :(得分:2)

我不知道tableview的dataSource行为,但是从错误中,它清楚地告诉我们,你只有一个部分,所以你不能处理第2部分,因为没有第2部分。你只能处理0部分。 您可以删除整行,并在0.besides部分添加行。您应该处理self.students数组,让它与tableview行匹配,否则它将崩溃。

<强>更新

此提交解决了问题表格滚动

I have correct it,This version.

此提交解决了问题表格滚动变得粗糙

I have correct it,This version.