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

时间:2017-03-15 00:53:50

标签: ios swift3 save uitextfield nsuserdefaults

我想使用userdefulats,以便当用户从视图控制器a转到b然后返回到文本仍然存在时。但是,我想这样做而无需用户点击按钮来保存textview文本。 enter image description here

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)


}}

3 个答案:

答案 0 :(得分:0)

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

  2. 保存在viewWillDisappear

  3. 每次文本更改时都可以保存。在VC中实现UITextViewDelegate,然后编写此函数:

    optional func textViewDidChange(_ textView: UITextView)
    
  4. 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。