Normal
Confirmaciones cotidianas con un tono discreto.
SWIFTUI · CÓDIGO ABIERTO
Añade notificaciones toast apiladas y cuidadas a tu app SwiftUI. Los gestos, los tiempos y el estilo ya están incluidos.
LISTO EN UN MOMENTO
Añade ToastKit con Swift Package Manager y conecta un ToastCenter a la vista que deba mostrar las notificaciones.
import SwiftUI
import ToastKit
struct ContentView: View {
@State private var toasts = ToastCenter()
var body: some View {
Button("Guardar") {
toasts.present(.normal, title: "Cambios guardados")
}
.toasts(toasts)
}
}Y listo. El aviso aparece cuatro segundos en la parte inferior del área segura. Las acciones de deslizamiento predeterminadas permiten eliminarlo o dejarlo para más tarde.
En Xcode, elige File → Add Package Dependencies e introduce https://github.com/DavidRicardoWilde/swiftui-toastkit.
EL MENSAJE
ToastMessage reúne el contenido, el estado semántico, la duración y las acciones opcionales de toque y deslizamiento. Usa el método rápido para avisos sencillos o crea el mensaje directamente si necesitas más control.
toasts.present(.warning,
title: "Poco espacio",
message: "Libera espacio para continuar la sincronización."
)
let message = ToastMessage(
status: .notification,
title: "Fotos nuevas",
message: "12 fotos de hoy",
icon: .system("photo.on.rectangle"),
duration: 6
)
toasts.present(message)Confirmaciones cotidianas con un tono discreto.
Invita a revisar algo antes de que falle.
Comunica los errores con una señal visual clara.
Usa el color de énfasis de tu app.
Si vuelves a presentar un mensaje con un id que ya está visible, se actualiza y pasa al frente. Es útil para mostrar estados como «Sincronizando…» y después «Sincronizado».
UN MOMENTO
.automatic usa la duración predeterminada del centro: cuatro segundos. Indica los segundos directamente o usa .indefinite si la persona debe responder.
// Se muestra dos segundos
ToastMessage(title: "Copiado", duration: 2)
// Permanece hasta que se cierre
ToastMessage(title: "Error al sincronizar", duration: .indefinite)
let toasts = ToastCenter(defaultDuration: 6)UN SIGUIENTE PASO CLARO
Se puede tocar, deslizar en cualquier dirección o mantener pulsado para ver ambas opciones antes de elegir. VoiceOver también ofrece las acciones por nombre.
| Gesto | Predeterminado | Personaliza con |
|---|---|---|
| Toque | Sin acción; pasa al contenido de atrás | tapAction u onTap |
| Deslizar hacia leading | Eliminar el aviso | swipeActions.leading |
| Deslizar hacia trailing | Mostrarlo en la próxima visita | swipeActions.trailing |
| Mantener pulsado | Previsualizar ambas acciones | Usa las mismas acciones |
let archive = ToastAction(
id: "archive",
title: "Archivar",
icon: .system("archivebox"),
confirmation: "Archivado"
) { toast in
store.archive(toast.id)
}
toasts.present(ToastMessage(
title: "Mensaje de Ana",
tapAction: ToastAction(title: "Abrir") { toast in
router.open(toast.id)
},
swipeActions: ToastSwipeActions(leading: archive, trailing: .later)
))Las acciones se ejecutan en este orden: su handler, el observador onToastAction de la pila y, por último, su efecto. La acción integrada .later guarda el aviso hasta que la página vuelva a aparecer.
A TU MANERA
El estilo predeterminado .glass dibuja una tarjeta translúcida teñida según el estado. Ajusta los tokens con ToastTheme, elige .plain o implementa ToastStyle para crear una tarjeta propia.
MyScreen()
.toasts(toasts)
.toastTheme(ToastTheme(
titleFont: .headline,
tint: { status in
status == .notification ? .pink : ToastTheme.standardTint(status)
},
cornerRadius: 16
))
// Empieza sin superficie ni colores fijos
MyScreen().toasts(toasts).toastStyle(.plain)Un estilo propio recibe el icono, el título, el mensaje, el estado y la información de si la tarjeta está elevada sobre la pista. La pila sigue controlando el diseño y los gestos.
EN EL LUGAR ADECUADO
De forma predeterminada, las tarjetas se apilan desde abajo y ocupan el 60% del área segura disponible.
// Anclar arriba
MyScreen().toasts(toasts, placement: .top)
// El 90% del área segura o un ancho fijo
MyScreen().toasts(toasts, width: .fraction(0.9))
MyScreen().toasts(toasts, width: .points(320))Dentro de un TabView, aplica .toasts(toasts) al contenido de la pestaña. Las barras del sistema ya forman parte del área segura. Marca una barra flotante personalizada con .toastObstruction() para que la pila deje espacio.
PARA TODAS LAS PERSONAS
Las acciones están disponibles sin depender de un gesto y respetan los ajustes de accesibilidad del entorno SwiftUI.
EN SU IDIOMA
Las etiquetas integradas de ToastKit están disponibles en inglés, japonés, chino simplificado y chino tradicional. Localiza en tu app los títulos, mensajes y etiquetas personalizadas.
// Guarda el texto de la app en un String Catalog o Localizable.strings.
toasts.present(.warning,
title: String(localized: "storage.low.title"),
message: String(localized: "storage.low.message")
)ToastKit muestra sus etiquetas integradas según la configuración regional de la app anfitriona. Los títulos y confirmaciones de ToastAction son cadenas normales y se localizan con las mismas herramientas de la app.