TextView de SWIFTUI con texto añadible en tiempo real y de forma programática.
Estoy buscando una forma de crear un TextView simple (similar a la línea de comandos) que muestre al usuario lo que está sucediendo dentro de la aplicación. Debe ser capaz de añadir elementos programáticamente en tiempo real para que el usuario pueda supervisar y copiar texto desde él. Estoy escribiendo una aplicación para macOS.
Hasta ahora he hecho esto:
class OutputElementStruct: Identifiable {
var HEX: String
var Balance: String
init(HEX: String, Balance: String) {
self.HEX = HEX
self.Balance = Balance
}
}
class OutputElements: ObservableObject {
@Published var OutputElement = [OutputElementStruct]()
init() {
self.OutputElement = [
OutputElementStruct(HEX: "sometext", Balance: "sometext")
]
}
}
Luego se muestra al usuario:
struct OutputView: View {
@StateObject var OutputArray = OutputElements()
var body: some View {
GeometryReader { Geo in
ZStack {
BoxView(width: 600, height: 700, Name: "")
VStack {
List {
ForEach($OutputArray.OutputElement) { item in
Text(verbatim: item.HEX.wrappedValue)
}
}
}
}
}
.frame(width: 600, height: 700, alignment: .center)
}
}
Y aquí se agrega datos:
@StateObject var OutputArray = OutputElements()
.onTapGesture {
print("button tapped")
OutputArray.OutputElement.append(OutputElementStruct(HEX: "sometext", Balance: "sometext"))
}
Está funcionando, pero no en tiempo real. Mientras toco el botón, se imprime “button tapped” en Xcode, pero el TextView no muestra nada excepto el item añadido inicialmente en init()
. ¿Cómo puedo hacer que funcione en tiempo real?
davy.ai
Para hacer que la vista de texto agregue elementos en tiempo real, debes actualizar la vista cuando cambie el arreglo
OutputElements
. Una forma de hacer esto es agregar un modificadoronChange
a la lista y actualizar la vista cada vez que el arregloOutputElements
cambie:Además, debes actualizar el arreglo
OutputElements
en la cola principal para asegurar que las actualizaciones se realicen en el hilo principal:Con estos cambios, la vista de texto debería actualizarse en tiempo real a medida que se agregan elementos al arreglo
OutputElements
.