UITableviewcell не обрабатывает и не копируется ячейкой с одинаковым индексом в другой раздел - PullRequest
0 голосов
/ 09 октября 2019

У меня есть 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
}

}

1 Ответ

1 голос
/ 09 октября 2019

попробуйте изменить

} else if indexPath.row < numberOfInstructions - 1 

на

} else if indexPath.section == 1 && indexPath.row < numberOfInstructions - 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...