ios - 如何在 TableView 中的 textView 上调用 didChange
问题描述
我在 tableView 的单元格中嵌入了一个 textView,并试图确定当用户按下完成时文本是否已更改。
当用户点击笔记时,它会从数据库中加载笔记,他们可以进行编辑,然后按完成。当他们按下完成时,我需要调用 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 调用。无论我在该字段中进行什么更改,它都不会打印调试消息。
解决方案
您可以在此处使用回调函数。您还可以将这样的回调函数用于 tableViewCell 中的按钮点击操作。这将在 tableview 中响应。
1)在tableViewCell文件中声明回调函数。这里这个回调函数传递字符串,你可以使用任何你想要的类型,或者如果你只是想在tableview中检测这个函数调用,你可以把它留空[()->()]。
var textViewTextChangeCallback:((String) -> Void)?
2) 在 tableViewCell 文件中使用 UITextViewDelegate 和 textViewDidChange。将此扩展名放入您的 tableViewCell 文件中。在此处调用回调函数并传递您想要的任何内容。
extension NoteEditTableViewCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
textViewTextChangeCallback?(textView.text)
}
}
3) 在 ViewController 文件的 UITableViewDataSource 的 cellForRawAt 中定义回调闭包。
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
}
推荐阅读
- angular - Typescript:从联合接口类型中获取独占成员
- python - np 选择匹配 Edning 的行
- erlang - :request_timeout 升级到 otp 23 时使用 MachineGun
- python - Python - 将列表转换为小写,解析输入值,返回输入和原始(未转换)列表条目
- angular - `mat-tab`中的Angular 10`routerLink`不起作用
- javascript - 如何将嵌套树视图列表设置为默认压缩而不是扩展?
- ios - 私人钥匙串商店
- python-3.x - Python3 Web 自动化错误 - ElementNotInteractableException:消息:元素不可交互
- php - 忽略特定的 css
- security - Veracode 有哪些非常好的和实用的替代方案