Como posso adicionar / remover células em uma exibição de tabela de maneira mais elegante?

Acho que esse é provavelmente um problema X Y, por isso darei algumas informações básicas primeiro.

Estou criando um aplicativo que pode mostrar um "formulário". O usuário pode preencher o formulário com algumas coisas e criar algumas coisas personalizadas.

Eu acho que a coisa mais adequada a fazer é usar uma exibição de tabela para o formulário. E eu posso exibir todas as caixas de texto que precisam ser preenchidas, em cada uma das células da tabela.

Aqui está uma captura de tela:

O botão "Adicionar nova entrada" insere uma nova célula na parte inferior quando é tocada. E se você deslizar uma das entradas para a esquerda, obtém o botão "Excluir". Você pode usar isso para excluir a entrada.

Como você pode ver, essa exibição de tabela precisa adicionar e excluir linhas.

Originalmente, eu estava usando um cocoapod chamado "TableViewModel", o que torna isso super fácil. Mas então eu acheium bug muito grave na biblioteca, então não quero mais usá-lo.

Eu tentei usar a exibição de tabeladeleteRowsAtIndexPaths einsertRowsAtIndexPaths métodos. Mas se eu fizer assim:

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)
}

Isso resultará em uma exceção dizendo que a exibição da tabela é inconsistente com a fonte de dados após a exclusão de uma linha. Isso significa que eu tenho que ter um código para lidar com essa inconsistência. Isso definitivamente tornará meu código mais difícil de ler.

O mesmo acontece com o método de inserção.

Além disso, preciso acompanhar quantas linhas existem em cada seção. E meu código se torna realmente confuso e insustentável com tudo isso.

Também procurei outras bibliotecas, mas todas elas são realmente estranhas e não tão diretas quanto "tableViewModel". Todos eles parecem exigir que eu crie um modelo para a visualização da tabela. Eu não entendo como fazer isso no meu caso. Eu só quero exibir um monte de campos de texto!

Como posso inserir ou excluir linhas com mais elegância? Eu acho que preciso escrever umextension da vista de tabela ou aprenda a escrever um modelo para minha vista de tabela. Mas eu sou capaz de fazer nenhum desses métodos.

questionAnswers(3)

yourAnswerToTheQuestion