#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Как я могу добавить ячейку (пользовательскую) в TableView? Я попробовал следующее:
@IBAction func AddCommentButton(_ sender: Any) {
addComment() {
//1)
self.tableView.beginUpdates()
tableView.reloadRows(at: [arrayOfComments.count].indices, with: .automatic)
self.tableView.endUpdates()
//2)
// let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: tableView.numberOfRows(inSection: 0)) as! commentTableViewCell
// addTemporaryComment(cell: cell)
}
}
1) дает:
Не удается преобразовать значение типа ‘Диапазон.Индекс>’ (он же ‘Диапазон’) к ожидаемому типу аргумента ‘[indexPath]’
2) Который использует этот метод, также вызывает много ошибок: все;
Использование неразрешенного идентификатора ‘indexPath’; вы имели в виду ‘indexPath’?
func addTemporaryComment(cell: commentTableViewCell) {
do {
let url = URL(string: (arrayOfComments[indexPath.row].user.profileImageUrlString)!)
let imageData = try Data(contentsOf: url!)
let image = UIImage(data: imageData)
cell.dateOfComment.text = arrayOfComments[indexPath.row].date
cell.commentText.text = arrayOfComments[indexPath.row].commentText
cell.profImage.image = image
cell.username.text = arrayOfComments[indexPath.row].user.username
} catch {
print(error, ": Failed in do block converting image")
}
}
}
Я даже не знаю, будет ли это работать.
Как я могу это исправить, если это правильный способ сделать это, а если нет, то как мне заставить это работать?
Комментарии:
1. В
func addTemporaryComment(cell: commentTableViewCell)
вы не передалиindexPath
вот почему он выдает сообщение об ошибке. Попробуйте добавить параметр indexPathfunc addTemporaryComment(cell: commentTableViewCell, indexPath: IndexPath)
Ответ №1:
Первым шагом должно быть добавление новых данных в массив, используемый table view для заполнения данных
YourTablearray.append([labeltext])
Затем обновите данные таблицы, чтобы вставить ячейку в конец таблицы
tableName.beginUpdates()
tableName.insertRowsAtIndexPaths([
NSIndexPath(forRow: YourTablearray.count-1, inSection: 0)], withRowAnimation: .Automatic)
tableName.endUpdates()
Комментарии:
1. Однако как мне вставить ячейку?
2. Приведенный выше метод insertRowsAtIndexPath создает ячейку и вставляет ее в указанный путь индекса. Обязательным условием является обновление данных новой ячейки в массиве
3. Я получаю завершающее приложение из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (12), должно быть равно количеству строк, содержащихся в этом разделе до обновления (12), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено), и плюс или минус число строк, вставленных или удаленных из этого раздела.строк, перемещенных в этот раздел или из него (0 перемещено, 0 перемещено). ‘
4. Вы обновили массив, используемый для заполнения tableview? вы также можете попробовать перезагрузить новую вставленную ячейку TableView.reloadRows(по адресу: [indexPath], с помощью: .automatic)
5. Нет необходимости в вызовах
begin/endUpdates
here . Вам это нужно только при нескольких вызовахinsert/delete/reloadRowsAt
, и вам нужно, чтобы пути к индексам оставались согласованными между этими вызовами.