如何使用 userdefualts 保存没有按钮操作的文本字段 (swift3)

How to use userdefualts to save a textfield without a button action (swift3)

我想使用 userdefulats,这样当用户从视图控制器 a 转到 b 然后再回到 a 时,文本仍然存在。但是我想这样做而无需用户点击按钮来保存 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)


}}
  1. 您可以在他们点击“下一步”按钮时保存

  2. 节省 viewWillDisappear

  3. 您可以在每次文本更改时保存。在你的 VC 中实现 UITextViewDelegate 然后写这个函数:

    optional func textViewDidChange(_ textView: UITextView)
    

文档:https://developer.apple.com/reference/uikit/uitextviewdelegate

试试这个:

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()
//    }
}
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委托方法中。当您导航到下一个控制器时,将调用 viewWillDisappear。