我有一个从所有xib文件中填充的UITableView。我试图在单击一个单元格时插入一个单元格下面的另一个单元格(将由一个单独的xib填充)。这样做的想法是制作一种下拉菜单。
我正在使用下面的代码来选择单元格时运行的函数:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//below prints the name of the selected user
print(name[indexPath.row])
var contactNum = ""
//below inserts a new cell into the table view, below the selected cell
// Update Table Data
myTableView.beginUpdates()
myTableView.insertRowsAtIndexPaths([
NSIndexPath(forRow: (indexPath.row)+1, inSection: 0)
], withRowAnimation: .Automatic)
let cell = myTableView.dequeueReusableCellWithIdentifier("DDOCell")
myTableView.endUpdates()
//below reloads the table view after changes are made
myTableView.reloadData()
}
但继续收到以下错误
'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (4), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
是否有人知道为什么没有在所选的数据源下创建具有不同数据源的新单元格的问题?
答案 0 :(得分:2)
您收到错误是因为您在调用insertRowsAtIndexPath
之前没有先更新数据模型。鉴于您的print
语句,您可能需要类似(在Swift 3中):
name.insert("some new name", at: indexPath.row + 1)
请注意,此处不需要拨打beginUpdates
和endUpdates
,因为您只拨打了delete|insert|reloadRowsAtIndexPaths
。
另请注意,您绝不能在dequeueReusableCellWithIdentifier
之外致电cellForRowAt
。如果您确实需要使用任何其他方法(例如didSelectRowAt
)来自表格中的单元格,请使用cellForRow(at:)
。