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.
Mostrar un mensaje en iOS que tiene la misma funcionalidad que Toast en Android
nilesh kumar
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];
-
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
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
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.
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
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:
GedankenNebel
rápido 3
Para una solución simple sin código de terceros:
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:
- Android como mensaje Toast
- 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
Hamed Ghadirian
Para Rápido 3 y 4:
Usar Tostadora biblioteca
Toast(text: "Hello, world!", duration: Delay.long)
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
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:
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