Как вызвать didChange для textView в TableView - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть textView, встроенный в ячейку в tableView, и я пытаюсь определить, был ли текст изменен, когда пользователь нажал «готово».

Когда пользователь нажимает на заметку, он загружает заметку из базы данных, он может внести изменения и нажать «Готово». Когда они нажимают «Готово», мне нужно вызвать didChange, чтобы убедиться, что они что-то изменили, чтобы избежать записи той же информации обратно в базу данных. Я установил свою ячейку как UITextFieldDelegate и попытался установить didChange.

import UIKit


class NoteEditTableViewCell: UITableViewCell, UITextFieldDelegate {


    @IBOutlet weak var editorView: UITextView!
    var origionalContent = ""

    var didContentChange = false

    func didChange<Value>(_ changeKind: NSKeyValueChange, valuesAt indexes: IndexSet, for keyPath: __owned KeyPath<NoteEditTableViewCell, Value>) {
        debugPrint("Content Changed")
    }
}

Хотя я не могу вызвать didChange для вызова. Независимо от того, что я изменяю в этом поле, оно никогда не печатает отладочное сообщение.

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете использовать функцию обратного вызова здесь. Вы также можете использовать функцию обратного вызова, как это для нажатия кнопки в tableViewCell. Это ответит в виде таблицы.

1) Объявите функцию обратного вызова в вашем файле tableViewCell. Здесь эта функция обратного вызова передает String, вы можете использовать любой тип, который вы хотите, или можете оставить его пустым [() -> ()], если вы просто хотите обнаружить этот вызов функции в табличном представлении.

var textViewTextChangeCallback:((String) -> Void)?

2) используйте UITextViewDelegate с textViewDidChange в вашем файле tableViewCell. Поместите это расширение в ваш файл tableViewCell. вызвать здесь функцию обратного вызова и передать все, что вы хотите.

extension NoteEditTableViewCell: UITextViewDelegate {

    func textViewDidChange(_ textView: UITextView) {
        textViewTextChangeCallback?(textView.text)
    }
 }

3) Определите закрытие обратного вызова в cellForRawAt UITableViewDataSource в файле ViewController.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifire") as! NoteEditTableViewCell

        cell.textViewTextChangeCallback = { [unowned self] text in
            print(text)  
            // if you want to save text on buttonClick when textViewDidChange call, create callback function for buttonClick & call its's closure here. i already show you how to define callback function follow as abov for any click you want from tableViewCell ;)
        }
    }
    return cell

}
...