Mostrar un mensaje en iOS que tiene la misma funcionalidad que Toast en Android

6 minutos de lectura

avatar de usuario
nilesh kumar

Necesito saber si hay algún método en iOS que se comporte como mensajes Toast en Android. Es decir, necesito mostrar un mensaje que se descarta automáticamente después de unos segundos. Esto es similar a la funcionalidad de la clase Toast en el entorno de Android.

  • Es posible que desee consultar este enlace stackoverflow.com/questions/3522866/android-toast-in-iphone

    – Emanuel

    8 de septiembre de 2013 a las 6:11


  • Gracias Emmanuel por el enlace. Estoy tratando de implementarlo.

    – Nilesh Kumar

    8 de septiembre de 2013 a las 6:20

  • Puedes comprobar esto github.com/ecstasy2/tostadas-notificaciones-ios

    – Raúl

    8 de septiembre de 2013 a las 7:20

  • Este chico ha proporcionado la solución stackoverflow.com/questions/3522866/…

    – Dipesh Pokhrel

    12 de marzo de 2015 a las 8:40

  • Una buena liberación: github.com/escalassec/Toast-Swift

    – Ferrán Maylinch

    15 de febrero de 2018 a las 12:21


avatar de usuario
Amar

Puedes hacer uso de MBProgressHUD proyecto.

Usar el modo HUD MBProgressHUDModeText para un comportamiento similar a un brindis,

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];

// Configure for text only and offset down
hud.mode = MBProgressHUDModeText;
hud.label.text = @"Some message...";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;

[hud hideAnimated:YES afterDelay:3];

ingrese la descripción de la imagen aquí

  • Para un comportamiento 100% similar al de Android, sugiero configurar hud.isUserInteractionEnabled = false para que pueda interactuar con el resto de la aplicación mientras se muestra el mensaje.

    – Mattia C.

    17 de noviembre de 2017 a las 10:19

  • @MattiaC. No puedo establecer el valor para hud.isUserInteractionEnabled = false parece que solo se proporciona getter.

    – Aniket Thakur

    23 de mayo de 2018 a las 8:20

  • está bloqueando la interfaz de usuario. no es el mismo comportamiento que el de Android

    – Romano M

    20 de octubre de 2018 a las 1:30


  • Usar hud.offset = CGPoint(x: 0, y: MBProgressMaxOffset) para colocar el HUD en el borde inferior.

    – ElegyD

    27 sep 2019 a las 10:10

avatar de usuario
kirit vaguela

NSString *message = @"Some message...";

UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
                                                message:message
                                               delegate:nil
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil, nil];
[toast show];
        
int duration = 1; // duration in seconds
        
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [toast dismissWithClickedButtonIndex:0 animated:YES];
});

Uso de UIAlertViewController para iOS 9 o posterior

NSString *message = @"Some message...";

UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:message
                                                        preferredStyle:UIAlertControllerStyleAlert];

[self presentViewController:alert animated:YES completion:nil];

int duration = 1; // duration in seconds

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [alert dismissViewControllerAnimated:YES completion:nil];
});

Rápido 3.2

let message = "Some message..."
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
self.present(alert, animated: true)
    
// duration in seconds
let duration: Double = 5
    
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
    alert.dismiss(animated: true)
}

  • Esto no es exactamente lo mismo que el brindis: la interacción del usuario con otras vistas está deshabilitada mientras se muestra el diálogo. ¿Tal vez haya una manera de eliminar el fondo ‘en gris’ agregando la capacidad de interactuar con otras vistas en la pantalla (como botones o lienzo de pintura en mi caso detrás de la alerta)?

    – virus

    15/09/2014 a las 10:54

  • UIAlertView ha quedado obsoleto en iOS9. ¿Hay alguna forma alternativa de hacer esto?

    – Rajeev Bhatia

    24 de febrero de 2016 a las 6:17

  • gracias, pero ¿podría usar el UIAlertController para mostrar el brindis también?

    – Rajeev Bhatia

    24 de febrero de 2016 a las 10:06

avatar de usuario
Suragch

En Android, un Brindis es un mensaje corto que se muestra en la pantalla durante un breve período de tiempo y luego desaparece automáticamente sin interrumpir la interacción del usuario con la aplicación.

ingrese la descripción de la imagen aquí

Entonces, muchas personas que provienen de Android quieren saber cuál es la versión iOS de Toast. Además de la pregunta actual, se pueden encontrar otras preguntas similares aquí, aquí y aquí. la respuesta es que no hay un equivalente exacto a un Toast en iOS. Sin embargo, se han presentado varias soluciones alternativas, que incluyen

  • hacer tu propia tostada con un UIView (ver aquí, aquí, aquí y aquí)
  • importar un proyecto de terceros que imita un Toast (ver aquí, aquí, aquí y aquí)
  • usando una Alerta sin botones con un temporizador (ver aquí)

Sin embargo, mi consejo es ceñirse a las opciones de interfaz de usuario estándar que ya vienen con iOS. No intente hacer que su aplicación se vea y se comporte exactamente igual que la versión de Android. Piense en cómo volver a empaquetarlo para que se vea y se sienta como una aplicación de iOS. Vea el siguiente enlace para algunas opciones.

  • Descripción general de las opciones estándar de iOS para mostrar información temporalmente a un usuario.

Considere rediseñar la interfaz de usuario de una manera que transmita la misma información. O, si la información es muy importante, una Alerta podría ser la respuesta.

  • Muy bien dicho, especialmente la noción de volver a trabajar en la interfaz de usuario. Definitivamente no es la respuesta más simple para los desarrolladores o diseñadores, pero Toasts podría convertirse fácilmente en otro “cajón de basura” de UX móvil, que se usa con demasiada frecuencia como vertedero de contenido que 1) es hablador y distrae, o 2) es información realmente útil, y , como tal, se presentaría mejor en contexto directo con los elementos de contenido principal de la aplicación como una insignia, icono o mensaje de estado en línea.

    – macserv

    12 de febrero de 2019 a las 17:07


avatar de usuario
Sazzad Hissain Khan

rápido 4

¿Qué tal este pequeño truco?

func showToast(controller: UIViewController, message : String, seconds: Double) {
    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    alert.view.backgroundColor = UIColor.black
    alert.view.alpha = 0.6
    alert.view.layer.cornerRadius = 15

    controller.present(alert, animated: true)

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
        alert.dismiss(animated: true)
    }
}

Ejemplo de llamada:

showToast(controller: self, message : "This is a test", seconds: 2.0)

Producción:

rVddCm

avatar de usuario
GedankenNebel

rápido 3

Para una solución simple sin código de terceros:

ingrese la descripción de la imagen aquí

Simplemente use un UIAlertController normal pero con estilo = hoja de acción (mira el código abajo)

let alertDisapperTimeInSeconds = 2.0
let alert = UIAlertController(title: nil, message: "Toast!", preferredStyle: .actionSheet)
self.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + alertDisapperTimeInSeconds) {
  alert.dismiss(animated: true)
}

La ventaja de esta solución:

  1. Android como mensaje Toast
  2. Todavía iOS Look&Feel

  • Inteligente. Nunca hubiera pensado en esto, gracias 😀

    – Maksym Musiienko

    27 de mayo de 2019 a las 13:09

  • Gracias, esta es la solución más simple y elegante en mi opinión.

    – Silas

    3 de mayo a las 9:18

avatar de usuario
Hamed Ghadirian

Para Rápido 3 y 4:

Usar Tostadora biblioteca

Toast(text: "Hello, world!", duration: Delay.long)

ingrese la descripción de la imagen aquí

Para rápido 2:

Usar JLToast

  • Inteligente. Nunca hubiera pensado en esto, gracias 😀

    – Maksym Musiienko

    27 de mayo de 2019 a las 13:09

  • Gracias, esta es la solución más simple y elegante en mi opinión.

    – Silas

    3 de mayo a las 9:18

avatar de usuario
eduardo irías

Si quieres uno con iOS Style, descarga este marco de Github

Marco de vista de alerta Toast de iOS

Estos ejemplos funcionan en su UIViewController, una vez que importó el Framework.

Ejemplo 1:

//Manual 
let tav = ToastAlertView()
tav.message = "Hey!"
tav.image = UIImage(named: "img1")!
tav.show()
//tav.dismiss() to Hide

Ejemplo 2:

//Toast Alert View with Time Dissmis Only
self.showToastAlert("5 Seconds",
                image: UIImage(named: "img1")!,
                hideWithTap: false,
                hideWithTime: true,
                hideTime: 5.0)

Final:

Toast Alert Ver ejemplo de imagen

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad