我能够将新文本获取到 TableViewController ,但是我不知道如何获取包含其中键入了文本的textview的单元格的行号。我需要知道行号(或该行中的对象)以更新正确的NSManagedObject。
我尝试过的事情:
我当时正在考虑使用标签,但是由于我需要不断添加和删除行,所以这不是最好的方法
我尝试使用 DidSelectedRowAtIndexPath ,但在 用户点击UITextView(UITextView最多覆盖一个单元格的80%)
在TableViewCell类中,我有:
func textViewDidEndEditing(_ textView: UITextView) {
// Post notification
let userInfo = [ "text" : textView.text]
NotificationCenter.default.post(
name: UITextView.textDidEndEditingNotification,
object: nil,
userInfo: userInfo as [AnyHashable : Any])
}
在TableViewController中,我有:
//Subscribe
NotificationCenter.default.addObserver(self,
selector: #selector(textEditingEnded(notification:)),
name: UITextView.textDidEndEditingNotification,
object: nil)
@objc func textEditingEnded(notification:Notification) {
guard let text = notification.userInfo?["text"] as? String else {return}
print ("text: \(text)")
}
请随时询问更多详细信息。 我将不胜感激,尽我所能!
答案 0 :(得分:0)
NSManagedObject
类型的属性。delegate
连接到单元格。cellForRowAt
中的适当数据源项传递到单元格。NSManagedObject
实例中更改属性并保存上下文。由于NSManagedObject
实例是引用类型,因此更改将继续存在。
答案 1 :(得分:0)
我希望您可以在UITableViewCell
子类中为某些项目添加变量
var item: Item?
然后在cellForRowAt
中为某些单元格设置特定的item
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ...
...
cell.item = array[indexPath.row]
...
}
现在您可以为您的单元格子类实现UITextViewDelegate
,并且可以在用户完成键入操作时使用方法textViewDidEndEditing
进行处理
class YourCell: UITableViewCell {
...
var item: Item?
...
override func awakeFromNib() {
yourTextView.delegate = self
}
}
extension YourCell: UITextViewDelegate {
func textViewDidEndEditing(_ textView: UITextView) {
... // here save text and here you can use variable `item`
}
}