我认为这可能是X Y问题,因此我将首先提供一些背景信息。

我正在构建一个可以显示“表单”的应用程序。用户可以在表格中填写一些内容并创建一些自定义内容。

我认为最合适的方法是为表格使用表格视图。我可以在每个表格单元格中显示所有需要填写的文本框。

这是屏幕截图:

ios - 如何更优雅地在表格 View 中添加/删除单元格?-LMLPHP

轻按“添加新输入”按钮后,它将在底部插入一个新单元格。而且,如果您向左滑动输入的其中之一,则会出现“删除”按钮。您可以使用它来删除输入。

如您所见,此表视图需要添加和删除行。

最初,我使用的是名为“ TableViewModel”的cocoapod,这使超级简单。但是后来我在库中找到了a really severe bug,所以我不再想要使用它了。

我尝试使用表视图的deleteRowsAtIndexPathsinsertRowsAtIndexPaths方法。但是,如果我这样做:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "Hello"
    return cell
}

// I use motionEnded here because I don't want to add a button or anything just to test this
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
    tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Fade)
}


删除一行后,将导致异常,表明表视图与数据源不一致。这意味着我必须具有处理这种不一致的代码。这肯定会使我的代码更难阅读。

插入方法也一样。

另外,我需要跟踪每个部分中有多少行。而且我的代码变得非常混乱,无法进行所有维护。

我还搜索了其他库,但它们确实很奇怪,不像“ tableViewModel”那么简单。它们似乎都要求我为表视图创建模型。我不了解该如何处理。我只想显示一堆文本字段!

如何更优雅地插入或删除行?我想我要么需要编写表视图的extension,要么学习为我的表视图编写模型。但是我不能做这两种方法。

最佳答案

因为您没有任何data source。另请参见logically:假设您使用insertRowsAtIndexPaths添加新行。所以现在您有了2 rows。但是,您的numberOfRowsInSection始终返回1.,因此它将崩溃,反之亦然。表视图应该与collectionNSArrayNSDictionaryNSSet等)一起使用。
您的帮助:

Already they have nade a form as yours

obj-c easy to understand how table view with data source work

Adding, Updating, Deleting and Moving records using Swift.

10-07 19:49
查看更多