2017-03-15 1 views
0

Je voudrais utiliser userdefulats de sorte que lorsque l'utilisateur passe du contrôleur de vue a à b puis revienne à un le texte est toujours là. Cependant, je voudrais le faire sans que l'utilisateur appuie sur un bouton pour sauvegarder le texte du texte. enter image description hereComment utiliser userdefualts pour enregistrer un champ de texte sans action de bouton (swift3)

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

textViewDidChange n'appartient pas à viewWillDisappear. @ Réponse de J.ren montre comment le faire –

Répondre

0

Essayez ceci:

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() 
// } 
} 
+0

que dites-vous dans // font textView créer ici. –

+0

J'ai modifié ma réponse. –

0
  1. Vous pourriez sauver quand ils ont frappé le bouton Suivant

  2. Enregistrer sur viewWillDisappear

  3. Vous pouvez enregistrer chaque fois que le texte change. Mettre en œuvre UITextViewDelegate dans votre CV, puis écrire cette fonction:

    optional func textViewDidChange(_ textView: UITextView) 
    

docs: https://developer.apple.com/reference/uikit/uitextviewdelegate

+0

J'ai édité ma question avec votre suggestion et cela n'a pas fonctionné. –

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() 
    } 
} 

Si vous voulez enregistrer votre texte de textView sans cliquer sur le bouton, vous devez l'enregistrer dans la méthode déléguée textViewDidChange. viewWillDisappear sera appelée lorsque vous naviguerez vers le prochain contrôleur.