Добавить дополнительные строки в TableView

#ios #swift #scroll #tableview #cell

#iOS #swift #прокрутка #просмотр таблицы #ячейка

Вопрос:

Я использую Swift 3. У меня есть UITableView с 7 строками:

 override func viewDidLoad() {
        super.viewDidLoad()        
        self.tableView.delegate = self
        self.tableView.dataSource = self        
}

func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int
    {        
        return 7
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    if (IndexPath.row == 6)
    {
        tableView.beginUpdates()
        var index = IndexPath(row: 7, section: 0)
        tableView.insertRows(at: [index], with: UITableViewRowAnimation.automatic)                    
        tableView.endUpdates()
    }
}
  

Я хочу добавить дополнительную ячейку при прокрутке до последней ячейки в таблице.
Но я получил эту ошибку:

Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (7), должно быть равно количеству строк, содержащихся в этом разделе до обновления (7), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено), и плюс или минус количество строк, перемещенных в этот раздел или из него (0 перемещено, 0 удалено).

Ответ №1:

Вам следует обновлять свой источник данных при вставке или удалении любых строк из TableView, чтобы количество объектов оставалось равным количеству строк в TableView

 func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int {        
    return dataSource.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if (IndexPath.row == 6) {
        tableView.beginUpdates()
        var index = IndexPath(row: 7, section: 0)
        let newObject = // create new model object here
        dataSource.insert(newObject, at: 7)
        tableView.insertRows(at: [index], with: UITableViewRowAnimation.automatic)                    
        tableView.endUpdates()
    }
}