Almacenar los datos de cadena / text UITextView

Por lo tanto, estoy intentando crear una vista que muestre una vista de text grande que se pueda editar. En el guión gráfico, se edita para mostrar el text "Toma tus notas aquí (Desliza hacia abajo para descartar el keyboard):" como marcador de position.

Me gustaría que recordara cuándo un usuario edita el text aparte de eso … entonces hice una instrucción if usando! = Ese comparador funciona para comparar cadenas en swift. No estoy seguro de que sea aprobado por la revisión de la tienda de aplicaciones porque recomiendan isEqualToString ().

De todos modos, el código a continuación es para esa vista … No restring el text ingresado si el usuario lo modifica desde el marcador de position. Reconoce que se modificó, pero cuando regresa a la vista, vuelve a mostrar el marcador de position pnetworkingeterminado … ¿Ayuda?

import Foundation import UIKit class MessageNotesViewController: UIViewController, UITextViewDelegate { @IBOutlet weak var messageNotes: UITextView! @IBOutlet var swiped: UISwipeGestureRecognizer! var placeholder = "Take your notes here (Swipe Down to dismiss the keyboard): " override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) messageNotes.delegate = self messageNotes.text = placeholder } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func openIn(_ sender: AnyObject) { print("Share with Social Media or Copy to Notes") //let textToShare = messageNotes.attributedText // let objectsToShare = [textToShare] //let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) //activityVC.popoverPresentationController?.sourceView = (sender as! UIView) //self.present(activityVC, animated: true, completion: nil) if let notes = messageNotes.text { let avc = UIActivityViewController.init(activityItems: [notes], applicationActivities: nil) avc.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem self.present(avc, animated: true) { print("completed") } } } func touchesBegan(_ messageNotes: UITextField) -> Bool { self.view.endEditing(true) return false } //let defaults = NSUserDefaults. override func viewWillDisappear(_ animated: Bool) { //PrepareForSegue didn't quite work print("View Will Disappear") //Testing if the user has entenetworking any text if so preserve entenetworking text if messageNotes.text != placeholder { //viewDidLoad(typedText) print("the user altenetworking the text in some way. \n") placeholder = messageNotes.text // assigns new placeholder } else{ // do something else - if needed } } } //Sub class decleration for ActivityForNotesViewController as called in openIn class ActivityForNotesViewController: UIActivityViewController { internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool { let activityTypesToExclude = [ ] if let actType = activity.activityType() { if activityTypesToExclude.contains(actType) { return true } else if super.excludedActivityTypes != nil { return super.excludedActivityTypes!.contains(actType) } } return false } } 

Hubo algunos errores de compilation al intentar implementar la respuesta a continuación.

En la function viewWillAppear, el comstackdor dice "No se puede llamar al valor del tipo de function no 'UserDefaults'": el comstackdor resalta la línea if let newText subrayado en rojo la if let newText línea de text con los UserDefaults.standardUserDefaults() .

  override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) messageNotes.delegate = self messageNotes.text = placeholder if let newText = UserDefaults.standardUserDefaults().objectForKey("textKey"){ if newText.length > 0 { messageNotes.text = newText } } } 

El mismo error de compilation se encuentra en la function viewWillDisappear:

 override func viewWillDisappear(_ animated: Bool) { //Prepare for segue didn't quite work for what I need print("View Will Disappear") //Testing if the user has entenetworking any text if so preserve entenetworking text if messageNotes.text != placeholder { //viewDidLoad(typedText) print("the user altenetworking the text in some way. \n") UserDefaults.standardUserDefaults().setObject(messageNotes.text!, forKey:"textKey") // assigns new placeholder } else{ // do something else - if needed } } } 

Debe save los cambios en alguna parte, recomiendo UserDefaults, que es una buena forma de save las preferences del usuario y otros pequeños datos.

Reemplazaría esto en vista viewWillDisappear :

 placeholder = messageNotes.text 

con

 UserDefaults.standardUserDefaults().set(messageNotes.text!, forKey:"textKey") 

Y en viewWillAppear agregaría:

 messageNotes.text = placeholder if let newText = UserDefaults.standardUserDefaults().object("textKey"){ if newText.length > 0 { messageNotes.text = newText as! String } }