我想将元素数量限制为三个。当我添加元素四时,元素一应该消失。
如果我希望滚动继续正常,我应该通过调用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
}
}
答案 0 :(得分:2)
我不知道tableview的dataSource行为,但是从错误中,它清楚地告诉我们,你只有一个部分,所以你不能处理第2部分,因为没有第2部分。你只能处理0部分。 您可以删除整行,并在0.besides部分添加行。您应该处理self.students数组,让它与tableview行匹配,否则它将崩溃。
<强>更新强>
此提交解决了问题表格滚动
I have correct it,This version.
此提交解决了问题表格滚动变得粗糙