我认为这可能是X Y的问题,所以我会先给出一些背景信息。如何更优雅地添加/删除表格视图中的单元格?
我正在构建一个可以显示“窗体”的应用程序。用户可以用一些东西填写表单并创建一些自定义的东西。
我认为最合适的做法是为表格使用表格视图。我可以在每个表格单元格中显示需要填写的所有文本框。
以下是截图:
“添加新输入”按钮,将插入一个新的电池在底部时,它被窃听。如果您将其中一个输入滑动到左侧,您将看到一个“删除”按钮。您可以使用它来删除输入。
如您所见,此表视图需要添加和删除行。
最初,我使用了一个名为“TableViewModel”的cocoapod,这使得这非常简单。但后来我在库中找到了a really severe bug,所以我不想再使用它了。
我尝试使用表视图的deleteRowsAtIndexPaths
和insertRowsAtIndexPaths
方法。但是,如果我不喜欢这样写道:
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
或学习为我的表视图编写模型。但是我能够完成这两种方法。
因为您没有任何数据源。另请参阅逻辑:假设您使用insertRowsAtIndexPaths添加了一个新行。所以现在你有两排。然而你的numberOfRowsInSection总是返回1,所以它会崩溃,反之亦然。表视图应该与集合(NSArray,NSDictionary,NSSet等)一起工作。 – Alok
事情是,当你添加或删除一行时,你总是说在该部分只有一行。您必须使用数组或字典来跟踪每行和每个部分中的数据(和哪些数据),并在'numberOfSectionsInTableView:'和'tableView:'numberOfRowsInSection:'中返回该值。 – Larme
你的意思是我不应该使用表视图来做这种表单?那我能做些什么呢? @Alok – Sweeper