我正在嘗試做一些類似于 Notes 應用程式的事情,但我堅持認為這是一件愚蠢的事情。當我進入我的應用程式時,有一個添加按鈕來添加新筆記。然后我可以重命名它并進入一個新的視圖控制器,它在整個螢屏上只包含標題和 textView。我使用 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,但它只是保存標題。
uj5u.com熱心網友回復:
您可以在 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()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524220.html
標籤:IOS迅速
下一篇:SQLite陳述句可發送
