我有static UITableView
與兩個sections
。當用戶在第1部分的索引2處敲擊單元格時,需要在竊聽單元格下方添加UITableViewCell
。隨後的每個單元點擊應該導致另一個單元添加到任何已添加的單元下方。添加行到靜態UITableView:獲取NSRangeException
這是我到目前爲止已經試過,但我有NSRangeException
崩潰,說明指數6超出了可用的範圍所以我顯然不能更新行正確莫名其妙的數..
根據Adding unknown number of rows to 'Static Cells' UITableView我已經覆蓋了所有使用indexPath的UITableView
方法,但它們的情況與我的略有不同。
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 1 {
// subTaskRow is an array holding all the indexes of the added cells
// so I know where to add the next one. I also know how many I've added
return 6 + subTaskRow.count
} else {
return super.tableView(tableView, numberOfRowsInSection: section)
}
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// If the Sub Task cell is picked
if (indexPath.section == 1 && indexPath.row == 3) {
// If this is the first subtask we want it to appear under Sub Tasks
// We know the index of the cell below sub task so we can add it in directly
if (subTaskRow.count == 0) {
subTaskRow.addObject(5)
tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 5, inSection: 1)], withRowAnimation: .Automatic)
tableView.reloadData()
// Other sub tasks should appear below previous sub tasks
} else {
// The last object in sub tasks will always be the
// indexPath of the previous added cell
let row = (subTaskRow.lastObject as! Int) + 1
subTaskRow.addObject(row)
tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: row, inSection: 1)], withRowAnimation: .Automatic)
tableView.reloadData()
}
}
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
// Now we override all the other methods to ensure we don't get a crash
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}
override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
return .None
}
override func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int {
return super.tableView(tableView, indentationLevelForRowAtIndexPath: indexPath)
}
我的猜測是,在加入的部分中間的單元格不更新已有的細胞或某事的indexPaths?我不知道我該怎麼做。
你的cellForRowAtIndexPath方法是什麼樣的?你可以將它添加到你的tableview方法列表中嗎?另外,在界面構建器中,您是否設置了「索引行限制」? – erparker
@erparker我沒有真正使用過一個,因爲它們都是靜態單元,沒有什麼可配置的......我需要將它用於我添加的行嗎? –
我注意到的另一件事是,你是否試圖做自己的UITableView的子類?你在所有的tableview數據源和委託方法前面都有覆蓋,如果你只是使用tableview作爲視圖控制器的一部分,那麼你不需要這些覆蓋。 – erparker