使用 Swift 在表格视图中插入部分
Posted
技术标签:
【中文标题】使用 Swift 在表格视图中插入部分【英文标题】:Insert section in table view with Swift 【发布时间】:2019-03-25 09:43:37 【问题描述】:我正在尝试在 tableview 中插入一个新部分
let oldIns = insertCounter //insertCounter = 40
insertCounter += Int(INSERT_MESSAGES) // insertCounter = 80
let minn = min(insertCounter, Int(dbmessages.count))
print(minn) // minn = 80
tableView.beginUpdates()
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet, with: .top)
tableView.endUpdates()
override func numberOfSections(in tableView: UITableView) -> Int
let a = min(insertCounter, Int(dbmessages.count))
print(a) // after call insertSections a = 80
return min(insertCounter, Int(dbmessages.count))
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5
我收到一个错误:
无效更新:节数无效。段数 更新后的表视图中包含的 (80) 必须等于 更新前表格视图中包含的部分数(40), 加上或减去插入或删除的节数(插入 80 个, 0 个已删除)。
当我执行以下操作时:
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(oldIns, minn)) as IndexSet, with: .top)
我得到错误:
异常'NSInternalInconsistencyException',原因:'试图 插入第 80 节,但更新后只有 80 节'
我做错了什么?
【问题讨论】:
不相关但NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet
是可怕的objective-c-ish。这是斯威夫特:IndexSet(integersIn: 0..<minn)
。首先,您必须更新数据源数组,然后插入行/节。在这种情况下,beginUpdates/endUpdates
毫无意义。
@vadian 是的,非常感谢,你可以添加为答案
【参考方案1】:
如所描述的错误,您的旧节数为 40,您插入了 80 个节,因此更新的节数应为 120。
override func numberOfSections(in tableView: UITableView) -> Int
let a = min(insertCounter, Int(dbmessages.count))
print(a) // after call insertSections a = 80
// you should return 120 instead of 80 here.
return min(insertCounter, Int(dbmessages.count))
或者你可以这样插入
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(oldIns, minn)) as IndexSet, with: .top)
【讨论】:
以上是关于使用 Swift 在表格视图中插入部分的主要内容,如果未能解决你的问题,请参考以下文章