Archivar Todos en Aplicación de Tareas
Clase 15 de 28 • Curso de Patrones MVVM en iOS
Resumen
El desarrollo de aplicaciones se trata de proporcionar funcionalidad y mejores experiencias al usuario. Esta clase te guiará sobre cómo implementar una característica esencial: el archivado de tareas en una aplicación de lista de pendientes.
¿Qué cambios debes hacer en el ViewModel?
El 'ViewModel' es el encargado de manejar la lógica de negocio de nuestra aplicación. Para archivar una tarea o "to-do", es esencial implementar la función archiveTodo
. Aquí los pasos para hacerlo:
- Creación de la Función: Se inicia agregando la función
archiveTodo
en el ViewModel.
fun archiveTodo() {
// Verificamos si el ID del todo existe
val index = getTodoIndex(todo)
if (index < 0) return // Si el elemento no existe, salir de la función
// Modificamos el estado a 'archivado'
todos[index].isArchived = true
saveData() // Guardamos los cambios
}
-
Verificación de Existencia: La función busca el índice del "to-do" a través de
getTodoIndex
. Si no encuentra, se detiene la ejecución. -
Modificación del Estado: Se cambia el atributo
isArchive
del "to-do" atrue
. Esto indica que el ítem está archivado. -
Guardar Cambios: Se utiliza
saveData()
para persistir esta modificación en el contexto de Core Data.
¿Dónde implementamos la función de archivar en la interfaz?
La interacción de la interfaz de usuario con nuestra lógica es crucial para integrar estas funcionalidades sin problemas.
-
Referencia de Botón: Dentro de
ToDoPreviewView
, localizamos el botón de archivar. -
Llamado a la Función: Usamos el ViewModel para llamar a
archiveTodo
cuando se presiona el botón.
// En el archivo ToDoPreviewView.swift
Button(action: {
viewModel.archiveTodo()
// Limpiamos el todo seleccionado y cerramos la vista
selectedTodo = nil
}) {
Text("Archivar")
}
¿Cómo mostrar la lista de tareas archivadas?
Basta con archivar los "to-dos". Ahora, necesitamos un procedimiento para mostrar una lista de tareas archivadas que proporcione valor agregado al usuario.
- Creación de una Variable para Archivos: En la vista
ToDoArchiveListView
, define una colección filtrada de tareas archivadas.
let archivedTodos: [TodoEntity] = viewModel.todos.filter { $0.isArchived }
- Mostrar en la Vista: Utiliza un ciclo
ForEach
para iterar y mostrar solo los elementos cuya propiedadisArchive
seatrue
.
ScrollView {
if !archivedTodos.isEmpty {
ForEach(archivedTodos, id: \.id) { todo in
Text(todo.title)
// Se puede mejorar más el diseño, con detalles del ítem
}
} else {
Text("No hay tareas archivadas.")
}
}
- Interfaz para Vacíos: Proporciona una vista alternativa en caso de que no haya "to-dos" archivados.
¿Qué detalle de diseño se debe considerar para los elementos archivados?
El diseño y la presentación pueden mejorar significativamente la experiencia del usuario. Aquí, respondemos al cómo y qué del diseño de estas tareas archivadas.
- Diseño en
ItemView
: Dentro de los elementos de la lista, agrega unHStack
oVStack
para mostrar la información como el título y la fecha.
VStack(alignment: .leading) {
Text(todo.title)
.font(.headline)
Text(todo.date, formatter: DateFormatter.short)
.font(.subheadline)
}
.padding(.vertical, 4)
- Íconos de Interacción: Al final de cada elemento, añade iconos para interactuar, Eliminar el "to-do" de manera definitiva o restaurarlo a la lista principal.
La integración de estas características no solo lleva la aplicación al siguiente nivel en términos de funcionalidad sino que también garantiza una mejor experiencia de usuario. Con trabajo técnico, diseño cuidadoso y pruebas continuas mejoras, puedes proporcionar una solución viable y robusta. ¡Mantente aprendiendo y no dudes en añadir nuevos desafíos a tus proyectos!