Android Toast equivalente en iOS

¿Alguien sabe lo que el equivalente a Java Toast de este evento iOS Objectivo C estaría en un fragment? A continuación se muestra una muestra de lo que he escrito en iOS. Lo que estoy buscando es la misma Alerta en Java con un Toast en lugar del iOS UIAlert. Lo siento si no lo dejé 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]; } } 

Encontré esta increíble class en github que funciona como un encanto. Toast para iOS Es suficiente importar los files 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.

No hay Android brindis equivalente en iOS.

Pero siempre hay soluciones como

puedes animar una vista y jugar con su alfa

El siguiente es solo un código de ejemplo, no una solución.

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

Si no quieres desvanecerse lentamente en 3 segundos, puedes usar

 [UIView setAnimationDelay:3]; 

y networkinguce la duración de la animation a 0.5f o algo así. Creo que usar un time de desaparición breve se siente mejor que simplemente establecer ocultar a SÍ

Hemos implementado algo así en nuestra biblioteca de código abierto Raisin Toast . La configuration es bastante sencilla una vez que agrega los files a su proyecto:

Agregue una propiedad a su delegado de la aplicación:

 @property (strong, nonatomic) RZMessagingWindow *errorWindow; 

Cree la window de postría pnetworkingeterminada:

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

y luego una línea para presentar la window de posts:

 [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 de agregar imágenes y styles personalizados.

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

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

 +(void)displayToastWithMessage:(NSString *)toastMessage { [[NSOperationQueue mainQueue] addOperationWithBlock:^ { UIWindow * keyWindow = [[UIApplication shanetworkingApplication] 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]; } ]; }]; } 

Quizás 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]; }); 

EDITAR: Para los que usan Xamarin.IOS, pueden hacer lo siguiente:

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

usando UIKit; es requerido.

Swift 2.0:

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

Descargue la class HRToast + UIView.swift y arrastre y suelte para proyectar. Asegúrese de marcar 'copyr elementos si es necesario' en el cuadro de dialog.

  //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") 

Si realmente quieres solo la apariencia de tostado de Android, entonces testing esta biblioteca, funciona bien, se ha usado dentro de algunas de mis aplicaciones

https://github.com/ecstasy2/toast-notifications-ios funciona bien …

C objective

 +(void)showPositiveMessage :(NSString*)message{ [ViewController showAlertWithBackgroundColor:[UIColor greenColor] textColor:[UIColor whiteColor] message:message];} +(void)showNegativeMessage :(NSString*)message{ [ViewController showAlertWithBackgroundColor:[UIColor networkingColor] textColor:[UIColor whiteColor] message:message];} +(void)showAlertWithBackgroundColor:(UIColor*)backgroundColor textColor:(UIColor*)textColor message:(NSString*)String{ AppDelegate* appDelegate = (AppDelegate*)[UIApplication shanetworkingApplication].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 brindar post en Swift?

Una solución Swift 3 list para copyr pasta:

 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 class 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; } } } 

Este también es muy útil, ya que también tiene un bloque de finalización, echa un vistazo 🙂 https://github.com/PrajeetShrestha/EkToast

Decidí desarmar una solución más completa de Xamarin.iOS / MonoTouch 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); } 

Si se llama al método desde un subprocess en segundo plano (no desde el subprocess principal de interfaz de usuario), entonces se requiere BeginInvokeOnMainThread, lo que significa que debe llamarse así.

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

Sé que esta pregunta es bastante antigua, pero me encontré aquí preguntándome lo mismo, y encontré una solución, así que pensé que iba a compartir. 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", prefernetworkingStyle: UIAlertControllerStyle.alert) self.present(alertController, animated: true, completion: nil) let delay = DispatchTime.now() + 1 // change 1 to desinetworking number of seconds DispatchQueue.main.asyncAfter(deadline: delay) { // Your code with delay alertController.dismiss(animated: true, completion: nil) } 

Si recibe un error que bloquea su aplicación, puede deberse a que alertConroller se está ejecutando en un hilo de background. Para solucionar este envuelve tu código en este:

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

Este método permite descartar el post cuando el usuario hace clic en un button "Aceptar" debajo del post

 let alertController = UIAlertController(title: "Error", message: "There was a problem logging in, please try again", prefernetworkingStyle: 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) 

Puedes usar, lo uso todo el time, esto funciona perfectamente en el objective c.

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

proporcionado aquí:

AviToast Github.