向Static UITableView添加行:获取NSRangeException

时间:2015-06-15 21:10:56

标签: ios swift uitableview

我有两个static UITableView的{​​{1}}。当用户在第1部分的索引2处点击单元格时,需要在挖掘的单元格下方添加sections。每个后续的单元格抽头都应该导致在任何已添加的单元格下面添加另一个单元格。

这是我到目前为止所尝试的内容,但我在UITableViewCell崩溃时声明索引6超出可用范围,所以我显然没有更新数量以某种方式正确行..

根据Adding unknown number of rows to 'Static Cells' UITableView,我已覆盖了使用indexPath的所有NSRangeException方法,但它们的情况与我的情况略有不同。

UITableView

我的猜测是,在一个部分中间添加一个单元格并不会更新已经存在的单元格的索引路径?我不确定我是怎么做到的。

1 个答案:

答案 0 :(得分:1)

我让这个工作,但这段代码只使用一个部分:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 1
    }

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // 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
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    // If the Sub Task cell is picked
    if (indexPath.section == 0 && 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.append(5)
            tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 5, inSection: 0)], 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.last! + 1
            subTaskRow.append(row)
            tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: row, inSection: 0)], withRowAnimation: .Automatic)
            tableView.reloadData()
        }
    }

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

    cell.textLabel!.text = "the row: \(indexPath.row)"

    return cell
}

试试这段代码,看看它是否适合你。从这里,您只需要添加代码来处理部分,这意味着将代码添加到numberOfSectionsInTableView。你不应该在这里调用super.numberOfRowsInTableview,因为如果你有2个数据部分,你应该知道每个部分有多少行