У меня есть tableView с динамическими ячейками с несколькими TextViews. Я закрываю клавиатуру с кнопкой «Отмена» и пытаюсь определить, какой TextView закрывается, чтобы «отменить» изменения, сделанные пользователем.
На основе этого похожего вопроса: Как определить, какое текстовое поле активно swift Я адаптировал один из ответов для следующего расширения:
extension UIView {
var textViewsInView: [UITextView] {
return subviews
.filter ({ !($0 is UITextView) })
.reduce (( subviews.compactMap { $0 as? UITextView }), { summ, current in
return summ + current.textViewsInView
})
}
var selectedTextView: UITextView? {
return textViewsInView.filter { $0.isFirstResponder }.first
}
}
Это работает, и сейчас я тестирую следующий код:
@objc func cancelButtonAction() {
if let test = tableView.selectedTextView {
print("View Found")
}
tableView.beginUpdates()
tableView.endUpdates()
}
Делая перерыв при печати («Просмотр найден»), я могу проверить «тест». Ниже приводится результат.
Это, по-видимому, идентифицирует только тест просмотра по адресу памяти. У меня вопрос: как мне это интерпретировать, чтобы определить редактируемое представление?
Обновление: похоже, есть некоторая проблема в понимании. Предположим, у меня есть таблица с двумя ячейками и в каждой ячейке два textViews (динамические ячейки). Предположим, что таблица загружается, говоря в 4 textViews. «Привет, Джон», «Привет, Сэм», «Пока, Джон», «Пока, Сэм». Предположим, что пользователь начинает редактировать ячейку и меняет одну ячейку на «Начос». Затем пользователь решает отменить. Я хочу затем заменить на значение, которое было там раньше (из моей модели). Я могу найти textView, но теперь он читает "Nachos". Поэтому я не знаю, какой textView перезагрузить с соответствующим Привет и пока.