example android ios xamarin xamarin.ios toast

android - example - toast ios



Android Toast equivalente en iOS (16)

Daniele D tiene una solución elegante, pero UIAlertView está en desuso. Use UIAlertController en su lugar:

NSString *message = @"Toast message."; UIAlertController *toast =[UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleAlert]; [self presentViewController:toast animated:YES completion:nil]; int duration = 2; // in seconds dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [toast dismissViewControllerAnimated:YES completion:nil]; });

¿Alguien sabe lo que el equivalente de Java Toast de este evento iOS Objetivo C estaría en un Fragmento? A continuación se muestra una muestra de lo que he escrito en iOS. Lo que busco es la misma Alerta en Java usando un Toast en lugar del iOS UIAlert. Lo siento si no dejé eso claro en mi publicación original.

- (void) dateLogic { NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM dd"]; NSString *theDate = [dateFormat stringFromDate:[NSDate date]]; //JANUARY if ([theDate isEqualToString:@"January 01"]) { feastDay = [[UIAlertView alloc] initWithTitle:@"New Years Day!" message:@"January 01" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Close", nil]; feastDay.delegate = self; [feastDay show]; } }


Decidí desarmar una solución Xamarin.iOS / MonoTouch más completa que funciona muy bien para mí.

private async Task ShowToast(string message, UIAlertView toast = null) { if (null == toast) { toast = new UIAlertView(null, message, null, null, null); toast.Show(); await Task.Delay(2000); await ShowToast(message, toast); return; } UIView.BeginAnimations(""); toast.Alpha = 0; UIView.CommitAnimations(); toast.DismissWithClickedButtonIndex(0, true); }

ACTUALIZACIÓN UIAlertView está en desuso en IOS 8. Aquí la nueva forma:

var toast = UIAlertController.Create("", message, UIAlertControllerStyle.Alert); UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(toast, true, async () => { await Task.Delay(2000); UIView.BeginAnimations(""); toast.View.Alpha = 0; UIView.CommitAnimations(); toast.DismissViewController(true, null); });

Si desea la tostada en la parte inferior de la pantalla en lugar de usarla en el medio

UIAlertControllerStyle.ActionSheet

Si se llama al método desde un hilo de fondo (no el hilo de la interfaz de usuario principal), entonces se requiere BeginInvokeOnMainThread, lo que significa simplemente llamarlo así.

BeginInvokeOnMainThread(() => { ShowToast(message); });


Encontré esta increíble clase en github que funciona como un encanto. Toast para iOS Basta con importar los archivos UIView + Toast.h y UIView + Toast.m y luego agregar

[self.view makeToast:@"This is a piece of toast."];

como está escrito en los ejemplos de la página.



He escrito el código más fácil y siempre funciona perfectamente para mí.

agregue esta línea en Appdelegate.h

- (void) showToastMessage: (NSString *) mensaje;

Agregue el código siguiente en Appdelegate.m

-(void) showToastMessage:(NSString *) message { //if there is already a toast message on the screen so that donot show and return from here only if ([self.window.rootViewController.view viewWithTag:100]) { return; } UILabel *lblMessage = [[UILabel alloc]init]; lblMessage.tag = 100; lblMessage.textAlignment = NSTextAlignmentCenter; lblMessage.text = message; lblMessage.font = [UIFont systemFontOfSize:12.0]; lblMessage.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f]; lblMessage.textColor = [UIColor whiteColor]; CGSize textSize = [[lblMessage text] sizeWithAttributes:@{NSFontAttributeName:[lblMessage font]}]; float x = self.window.rootViewController.view.center.x - textSize.width/2; float labelWidth = MIN(textSize.width, SCREEN_WIDTH - 40); lblMessage.frame = CGRectMake(x, SCREEN_HEIGHT - 90.f, labelWidth + 50, textSize.height + 20); CGRect oldFrame = lblMessage.frame; //comment this line if u don''t want to show the toost message below in the screen lblMessage.center = self.window.rootViewController.view.center; x = lblMessage.frame.origin.x; lblMessage.frame = CGRectMake(x, oldFrame.origin.y, oldFrame.size.width, oldFrame.size.height); //and add this line if you want to show the message in the centre of the screen //lblMessage.center = self.window.rootViewController.view.center; lblMessage.layer.cornerRadius = lblMessage.frame.size.height/2; lblMessage.layer.masksToBounds = true; [self.window.rootViewController.view addSubview:lblMessage]; [self performSelector:@selector(removeToastMessage:) withObject:lblMessage afterDelay:2.0f]; } -(void) removeToastMessage: (UILabel *)label { [UIView animateWithDuration:1.0f animations:^{ label.alpha = 0.f; }]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [label removeFromSuperview]; }); }

Ahora, en cualquier ViewController que desee usar, simplemente importe el #import "AppDelegate.h" y use el código siguiente.

Para mostrar el mensaje de brindis

AppDelegate *appDel = (AppDelegate *) [[UIApplication sharedApplication] delegate]; NSString *strMessage = @"show my alert"; [appDel showToastMessage:strMessage];


Hemos implementado algo como esto en nuestra biblioteca de código abierto Raisin Toast . La configuración es bastante sencilla una vez que agregue los archivos a su proyecto:

Agregue una propiedad a su delegado de aplicación:

@property (strong, nonatomic) RZMessagingWindow *errorWindow;

Crea la ventana de mensajería predeterminada:

self.errorWindow = [RZMessagingWindow defaultMessagingWindow]; [RZErrorMessenger setDefaultMessagingWindow:self.errorWindow];

y luego una línea para presentar la ventana de mensajes:

[RZErrorMessenger displayErrorWithTitle:@"Whoops!" detail:@"Something went horribly wrong and we accidentally cut off the wrong leg"];

El proyecto de demostración destaca algunas de las personalizaciones más avanzadas para agregar imágenes y estilos personalizados.

La implementación usa una segunda ventana UI y debido al método de clase RZErrorMessenger está disponible en todas partes.


Lo manejé con un método simple UI Helper estático usando la Ventana clave:

+(void)displayToastWithMessage:(NSString *)toastMessage { [[NSOperationQueue mainQueue] addOperationWithBlock:^ { UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow]; UILabel *toastView = [[UILabel alloc] init]; toastView.text = toastMessage; toastView.font = [MYUIStyles getToastHeaderFont]; toastView.textColor = [MYUIStyles getToastTextColor]; toastView.backgroundColor = [[MYUIStyles getToastBackgroundColor] colorWithAlphaComponent:0.9]; toastView.textAlignment = NSTextAlignmentCenter; toastView.frame = CGRectMake(0.0, 0.0, keyWindow.frame.size.width/2.0, 100.0); toastView.layer.cornerRadius = 10; toastView.layer.masksToBounds = YES; toastView.center = keyWindow.center; [keyWindow addSubview:toastView]; [UIView animateWithDuration: 3.0f delay: 0.0 options: UIViewAnimationOptionCurveEaseOut animations: ^{ toastView.alpha = 0.0; } completion: ^(BOOL finished) { [toastView removeFromSuperview]; } ]; }]; }


No hay equivalente de Android toast en iOS.

Pero siempre hay soluciones como

puedes animar una vista y jugar con su alfa

El siguiente es solo código de muestra, no una solución

UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:3.0f]; imageView.alpha = 0.0f; [UIView commitAnimations];

si no quieres atenuar lentamente en 3 segundos, puedes usar

[UIView setAnimationDelay:3];

y reduce la duración de la animación a 0,5 f o algo. Creo que usar un corto tiempo de fundido de salida se siente mejor que simplemente configurarlo en SÍ



Puedes usar, lo uso todo el tiempo, esto funciona perfectamente bien en el objetivo c.

+(void)showToastOnView:(UIView * _Nonnull)view withString:(NSString * _Nonnull)text forDuration:(AVToastDurationStatus)duration;

proporcionado aquí:

AviToast Github.


Sé que esta pregunta es bastante antigua, pero me encontré aquí preguntándome lo mismo, y encontré una solución, así que pensé que podría compartirla. Este método permite descartar la alerta después de un retraso establecido por usted.

let alertController = UIAlertController(title: "Error", message: "There was a problem logging in, please try again", preferredStyle: UIAlertControllerStyle.alert) self.present(alertController, animated: true, completion: nil) let delay = DispatchTime.now() + 1 // change 1 to desired number of seconds DispatchQueue.main.asyncAfter(deadline: delay) { // Your code with delay alertController.dismiss(animated: true, completion: nil) }

Si obtiene un error que bloquea su aplicación, puede deberse a que elController se está ejecutando en una cadena de fondo. Para solucionar esto, ajuste su código en esto:

DispatchQueue.main.async(execute: { });

Este método permite descartar el mensaje cuando el usuario hace clic en el botón "Aceptar" debajo del mensaje

let alertController = UIAlertController(title: "Error", message: "There was a problem logging in, please try again", preferredStyle: UIAlertControllerStyle.alert) let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in print("OK") } alertController.addAction(okAction) self.present(alertController, animated: true, completion: nil)



Swift 2.0:

Use https://github.com/Rannie/Toast-Swift/blob/master/SwiftToastDemo/Toast/HRToast%2BUIView.swift .

Descargue la clase HRToast + UIView.swift y arrastre y suelte para proyectar. Asegúrese de marcar "copiar elementos si es necesario" en el cuadro de diálogo.

//Usage: self.view.makeToast(message: "Simple Toast") self.view.makeToast(message: "Simple Toast", duration: 2.0, position:HRToastPositionTop) self.view.makeToast(message: "Simple Toast", duration: 2.0, position: HRToastPositionCenter, image: UIImage(named: "ic_120x120")!) self.view.makeToast(message: "It is just awesome", duration: 2.0, position: HRToastPositionDefault, title: "Simple Toast") self.view.makeToast(message: "It is just awesome", duration: 2.0, position: HRToastPositionCenter, title: "Simple Toast", image: UIImage(named: "ic_120x120")!) self.view.makeToastActivity() self.view.makeToastActivity(position: HRToastPositionCenter) self.view.makeToastActivity(position: HRToastPositionDefault, message: "Loading") self.view.makeToastActivityWithMessage(message: "Loading")


Tal vez esto pueda ayudar a alguien:

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

ACTUALIZACIÓN UIAlertView está en desuso en IOS 8. Aquí la nueva forma:

NSString *message = @"Toast kind of message"; UIAlertController *toast =[UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleAlert]; [self presentViewController:toast animated:YES completion:nil]; int duration = 1; // in seconds dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [toast dismissViewControllerAnimated:YES completion:nil]; });

EDITAR: Para los que usan Xamarin.IOS puedes hacer esto:

new UIAlertView(null, message, null, "OK", null).Show();

usando UIKit; es requerido.


Una solución Swift 3 lista para copiar y pegar:

import UIKit public extension UIView { public func showToast(message:String, duration:Int = 2000) { let toastLabel = UIPaddingLabel(); toastLabel.padding = 10; toastLabel.translatesAutoresizingMaskIntoConstraints = false; toastLabel.backgroundColor = UIColor.darkGray; toastLabel.textColor = UIColor.white; toastLabel.textAlignment = .center; toastLabel.text = message; toastLabel.numberOfLines = 0; toastLabel.alpha = 0.9; toastLabel.layer.cornerRadius = 20; toastLabel.clipsToBounds = true; self.addSubview(toastLabel); self.addConstraint(NSLayoutConstraint(item:toastLabel, attribute:.left, relatedBy:.greaterThanOrEqual, toItem:self, attribute:.left, multiplier:1, constant:20)); self.addConstraint(NSLayoutConstraint(item:toastLabel, attribute:.right, relatedBy:.lessThanOrEqual, toItem:self, attribute:.right, multiplier:1, constant:-20)); self.addConstraint(NSLayoutConstraint(item:toastLabel, attribute:.bottom, relatedBy:.equal, toItem:self, attribute:.bottom, multiplier:1, constant:-20)); self.addConstraint(NSLayoutConstraint(item:toastLabel, attribute:.centerX, relatedBy:.equal, toItem:self, attribute:.centerX, multiplier:1, constant:0)); UIView.animate(withDuration:0.5, delay:Double(duration) / 1000.0, options:[], animations: { toastLabel.alpha = 0.0; }) { (Bool) in toastLabel.removeFromSuperview(); } } }

La clase UIPaddingLabel:

import UIKit @IBDesignable class UIPaddingLabel: UILabel { private var _padding:CGFloat = 0.0; public var padding:CGFloat { get { return _padding; } set { _padding = newValue; paddingTop = _padding; paddingLeft = _padding; paddingBottom = _padding; paddingRight = _padding; } } @IBInspectable var paddingTop:CGFloat = 0.0; @IBInspectable var paddingLeft:CGFloat = 0.0; @IBInspectable var paddingBottom:CGFloat = 0.0; @IBInspectable var paddingRight:CGFloat = 0.0; override func drawText(in rect: CGRect) { let insets = UIEdgeInsets(top:paddingTop, left:paddingLeft, bottom:paddingBottom, right:paddingRight); super.drawText(in: UIEdgeInsetsInsetRect(rect, insets)); } override var intrinsicContentSize: CGSize { get { var intrinsicSuperViewContentSize = super.intrinsicContentSize; intrinsicSuperViewContentSize.height += paddingTop + paddingBottom; intrinsicSuperViewContentSize.width += paddingLeft + paddingRight; return intrinsicSuperViewContentSize; } } }


C objetivo

+(void)showPositiveMessage :(NSString*)message{ [ViewController showAlertWithBackgroundColor:[UIColor greenColor] textColor:[UIColor whiteColor] message:message];} +(void)showNegativeMessage :(NSString*)message{ [ViewController showAlertWithBackgroundColor:[UIColor redColor] textColor:[UIColor whiteColor] message:message];} +(void)showAlertWithBackgroundColor:(UIColor*)backgroundColor textColor:(UIColor*)textColor message:(NSString*)String{ AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero]; label.textAlignment = NSTextAlignmentCenter; label.text = String; label.font = [UIFont fontWithName:@"HelveticaNeue" size:FONTSIZE]; label.adjustsFontSizeToFitWidth = true; [label sizeToFit]; label.numberOfLines = 4; label.layer.shadowColor = [UIColor grayColor].CGColor; label.layer.shadowOffset = CGSizeMake(4, 3); label.layer.shadowOpacity = 0.3; label.frame = CGRectMake(320, 64, appDelegate.window.frame.size.width, 44); label.alpha = 1; label.backgroundColor = backgroundColor; label.textColor = textColor; [appDelegate.window addSubview:label]; CGRect basketTopFrame = label.frame; basketTopFrame.origin.x = 0; [UIView animateWithDuration:2.0 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:0.1 options:UIViewAnimationOptionCurveEaseOut animations: ^(void){ label.frame = basketTopFrame; } completion:^(BOOL finished){ [label removeFromSuperview]; } ];}

Rápido

¿Cómo se tuesta el mensaje en Swift?