我想使用userdefulats,以便当用户从视图控制器a转到b然后返回到文本仍然存在时。但是,我想这样做而无需用户点击按钮来保存textview文本。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewWillDisappear(_ animated: Bool) {
optional func textViewDidChange(_ textView: UITextView)
}}
答案 0 :(得分:0)
您可以在点击“下一步”按钮时保存
保存在viewWillDisappear
每次文本更改时都可以保存。在VC中实现UITextViewDelegate
,然后编写此函数:
optional func textViewDidChange(_ textView: UITextView)
docs:https://developer.apple.com/reference/uikit/uitextviewdelegate
答案 1 :(得分:0)
试试这个:
import UIKit
import Foundation
class ViewControllerA: UIViewController, UITextViewDelegate {
var textView: UITextView?
let textKey = "textKey"
//When view will appear, we should read text we have stored, then display text in textview
override func viewWillAppear(_ animated: Bool) {
//We may get nil from UserDefaults
let storedText = UserDefaults.standard.object(forKey: textKey) as? String ?? ""
self.textView?.text = storedText
}
override func viewWillDisappear(_ animated: Bool) {
UserDefaults.standard.setValue(self.textView?.text, forKey: textKey)
UserDefaults.standard.synchronize()
}
override func viewDidLoad() {
super.viewDidLoad()
//Do textView create here
//If u create UITextView by IB, u also can finish next work in IB.
self.textView = UITextView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
self.textView?.delegate = self
self.view.addSubview(self.textView!)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//Here we save text in textView everytime we edit textview, but we can delay saving until viewWillDisappear
// func textViewDidChange(_ textView: UITextView) {
// UserDefaults.standard.setValue(textView.text, forKey: "text")
// UserDefaults.standard.synchronize()
// }
}
答案 2 :(得分:0)
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var txtView: UITextView!
override func viewWillAppear(_ animated: Bool) {
let myData = UserDefaults.standard.object(forKey: "myData") as? String ?? ""
self.txtView?.text = myData
}
//MARK: - TextView Delegate -
func textViewDidChange(_ textView: UITextView) {
UserDefaults.standard.setValue(self.txtView?.text, forKey: "myData")
UserDefaults.standard.synchronize()
}
}
如果要在不单击按钮的情况下保存textView文本,则必须将其保存在textViewDidChange委托方法中。导航到下一个Controller时将调用viewWillDisappear。