Estoy tratando de crear una aplicación de estilo de notas simple usando SwiftUI. Me las arreglé para crear una entidad (ApplicationQuestion), usar un TextEditor para guardar la entrada del usuario (question.answer) en un atributo de esta entidad y mostrar este atributo en una vista.

Sin embargo, en lugar de guardar y sobrescribir el question.answer cada vez que me gustaría poder editarlo.

Solo puedo encontrar ejemplos que hacen esto con UIkit y la documentación no explica cómo puede cargar texto en el editor. No puedo resolver si esto no se puede lograr con SwiftUI y necesito usar un enfoque diferente.

El compositor de respuestas actualmente se ve así:

struct answerComposer: View {
    
    let question: ApplicationQuestion

    @Environment(\.managedObjectContext) var moc
    @State var answerText: String = ""
    @State private var currentWordCount: Int = 0


    
    var body: some View {
        
        VStack{
            
            //Title
            Text(self.question.title?.uppercased() ?? "Unknown Title")
                  .font(.largeTitle)
            //Detail
            Text(self.question.detail ?? "Unknown detail")
                  .font(.footnote)
                  .fontWeight(.light)
            //answer
            Text(self.question.answer ?? "Unknown answer")
                .font(.body)
                .padding()

         //text editor
            
            TextEditor(text: $answerText)
                .allowsTightening(true)
                .onChange(of: answerText) { value in
                                    let words = answerText.split { $0 == " " || $0.isNewline }
                                    self.currentWordCount = words.count
                                }
                .padding()
            
            // Save Button
            Button("Save") {
           // let question = ApplicationQuestion(context: self.moc)
                question.answer = self.answerText

                try? self.moc.save()

            }
            
            
        }
        

        
    }

}
2
PaulBarr 27 oct. 2020 a las 18:13

1 respuesta

La mejor respuesta

Supongo que querías esto

struct answerComposer: View {
    
    let question: ApplicationQuestion

    @Environment(\.managedObjectContext) var moc
    @State private var currentWordCount: Int = 0

    @State private var answerText: String

    init(question: ApplicationQuestion) {
       self.question = question
       self._answerText = State(initialValue: question.answer ?? "")    // << here !!
    }

    // ... other code
}
0
Asperi 27 oct. 2020 a las 18:11