我的text离开单元格时,查看文本不保存



我正在尝试做一些类似于Notes应用程序的事情,但我被我认为如此愚蠢的事情所困扰。当我进入我的应用程序时,会有一个添加按钮来添加新笔记。然后我可以重命名它,并输入一个新的视图控制器,该控制器只包含标题和文本整个屏幕上的视图。我使用Codable和UserDefaults来保存数据。标题保存得很好,但无论我在textView中键入什么,然后回来查看tableView中的所有行,我都会回到那个特定的";注释";我键入的所有文本都不见了。

这是我的didSelectRowAt方法

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Note") as? NoteViewController {
navigationController?.pushViewController(vc, animated: true)


vc.bodyText = note[indexPath.row].body
vc.titleText = note[indexPath.row].title

if note[indexPath.row].title == "New note" {
let ac = UIAlertController(title: "Rename note", message: "Please enter name for a new note", preferredStyle: .alert)
ac.addTextField()
ac.addAction(UIAlertAction(title: "Cancel", style: .default))
ac.addAction(UIAlertAction(title: "Rename", style: .default) { [unowned self, ac] _ in
let newName = ac.textFields![0]
note[indexPath.row].title = newName.text!
self.tableView.reloadData()
vc.viewDidLoad()
self.save()

})
present(ac, animated: true)
} else {

}
}
}

还有我的NoteViewController

class NoteViewController: UIViewController, UITextViewDelegate {
@IBOutlet var textView: UITextView!

var bodyText: String?
var titleText: String?

override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(image: .checkmark, style: .plain, target: self, action: #selector(saveNote))
title = titleText
textView.text = bodyText

}

和保存((

func save() {
let jsonEncoder = JSONEncoder()
if let savedData = try? jsonEncoder.encode(note) {
let defaults = UserDefaults.standard
defaults.set(savedData, forKey: "note")
} else {
print("failed to load data")
}
}

我试着通过将save((添加到不同的位置来更改我的方法didSelectRowAt,但这只是保存标题。

您可以在NoteViewController中使用onSavingTap闭包将数据传回主视图控制器。

class NoteViewController: UIViewController, UITextViewDelegate {
var onSavingTap: ((String) -> Void)?
@IBOutlet var textView: UITextView!
var bodyText: String?
var titleText: String?
override func viewDidLoad() {
super.viewDidLoad()

navigationItem.rightBarButtonItem = UIBarButtonItem(image:   .checkmark, style: .plain, target: self, action: #selector(saveNote))
title = titleText
textView.text = bodyText

}
@objc func saveNote() {
onSavingTap?(textView.text ?? "")
}
}

然后在didSelectRow方法中,您设置闭包以更新您的数据数组,如下所示:

vc.onSavingTap = { [weak self] body in
self?.note[indexPath.row].body = body
self?.save()
}

最新更新