我想將元素數量限制爲三個。當我添加元素四時,元素一應該消失。如何避免重新加載整個表格,中斷滾動
如果我想滾動繼續正常,我應該告訴UITableView
我通過調用deleteRowsAtIndexPaths
刪除整個section
零中的行。之後,我需要告訴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
}
}
如果您最多隻有3行,那麼只需重新加載整個表。理解這些代碼會更容易,而且很可能你永遠不需要優化它。 – NRitH
@NRitH我需要3段最大和每個部分持有基於api響應項目的行數 –
@NRitH每個請求返回20個帖子或更多,它將能夠追加一個部分,所以當用戶滾動和用戶轉到部分的中間然後調用Web請求並插入一個部分。當部分達到3然後4請求插入部分並從頂部部分移到表視圖。它有道理嗎?請你幫我 –