如何使用 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)
}}
您可以在他们点击“下一步”按钮时保存
节省 viewWillDisappear
您可以在每次文本更改时保存。在你的 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。
我想使用 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)
}}
您可以在他们点击“下一步”按钮时保存
节省
viewWillDisappear
您可以在每次文本更改时保存。在你的 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。