У меня есть uitableview, который загружает строки из массива в раздел, а затем добавляет пустую ячейку в конец каждого раздела, единственная проблема в том, что он работает неправильно. Я думаю, это из-за того, что одна из ячеек не перезагружается и не реагирует на какой-либо код, который пытается ее изменить. На рисунке ниже показана проблема. Обратите внимание, что в конце раздела с инструкциями есть пустая ячейка, но в конце раздела с ингредиентами нет пустой ячейки. Вместо этого ячейка, скопированная из строки 4 из раздела инструкций, теперь помещается в раздел ингредиентов в той же строке, где должна быть пустая ячейка.
(https://imgur.com/a/io9bTNB)
Код для cellForRowAtниже, вместе с классом tableviewcellclass и соответствующим кодом.
CellForRowAt и соответствующим кодом
var numberOfIngredients : Int = temporaryRecipeItem.ingredients.count + 1
var numberOfInstructions : Int = temporaryRecipeItem.instructions.count + 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = creationTableView.dequeueReusableCell(withIdentifier: "recipeInstructionsCell", for: indexPath) as! RecipeInstructionsCell
cell.selectionStyle = .none
cell.indexPath = indexPath
cell.tableViewMaster = self.creationTableView
cell.delegate = self
print(indexPath.section,indexPath.row)
cell.cellTextView.text = ""
if indexPath.section == 0 && indexPath.row < numberOfIngredients - 1 {
cell.cellTextView.text = temporaryRecipeItem.ingredients[indexPath.row]
} else if indexPath.row < numberOfInstructions - 1 {
cell.cellTextView.text = temporaryRecipeItem.instructions[indexPath.row]
//print(cell.cellTextView.text!)
}
print(cell.cellTextView.text!)
return cell
}
TableViewCellClass
class RecipeInstructionsCell: UITableViewCell, UITextViewDelegate {
@IBOutlet var cellTextView: UITextView!
var indexPath : IndexPath?
var tableViewMaster : UITableView?
var delegate : RecipeInstructionsCellProtocol?
var hasAddedRow : Bool = false
override func awakeFromNib() {
super.awakeFromNib()
self.cellTextView.delegate = self
self.cellTextView.tintColor = UIColor.blue
self.cellTextView.autocorrectionType = .yes
self.cellTextView.autocapitalizationType = .sentences
//self.cellTextView.textColor = UIColor.lightGray
self.cellTextView.isScrollEnabled = false
self.cellTextView.textContainer.heightTracksTextView = true
self.cellTextView.returnKeyType = .next
self.cellTextView.text = ""
}
func textViewDidChange(_ textView: UITextView) {
let size = textView.bounds.size
let newSize = textView.sizeThatFits(CGSize(width: size.width, height: CGFloat.greatestFiniteMagnitude))
if size.height != newSize.height {
self.tableViewMaster?.beginUpdates()
self.tableViewMaster?.endUpdates()
//let thisIndexPath = IndexPath(row: textView.tag, section: 0)
}
delegate?.editText(at: (self.indexPath!))
}
func textViewDidEndEditing(_ textView: UITextView) {
delegate?.saveText(at: self.indexPath!, text: self.cellTextView.text)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
if tableViewMaster!.cellForRow(at: IndexPath(row: self.indexPath!.row + 1, section: self.indexPath!.section)) != nil {
self.cellTextView.resignFirstResponder()
let cell = tableViewMaster?.cellForRow(at: IndexPath(row: self.indexPath!.row + 1, section: self.indexPath!.section)) as! RecipeInstructionsCell
cell.cellTextView.becomeFirstResponder()
}
}
return true
}
}