Android Toast эквивалент в iOS

Кто-нибудь знает, что эквивалент Java Toast этого события Objective C iOS будет в фрагменте? Ниже приведен пример того, что я написал в iOS. То, что я ищу в Alert на Java, используя Toast вместо iOS UIAlert. Мне жаль, если я не сделал это ясно на моем оригинальном посте.

- (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]; } } 

Я нашел этот удивительный класс в github, который работает как шарм. Toast for iOS Достаточно импортировать файлы UIView + Toast.h и UIView + Toast.m, а затем добавить

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

Как написано на примерах страниц.

В iOS нет эквивалента тоста для Android.

Но всегда есть обходные пути, такие как

Вы можете анимировать представление и играть с его альфой

Ниже приведен пример кода, а не решение

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

Если вы не хотите постепенно исчезать в течение 3 секунд, вы можете использовать

 [UIView setAnimationDelay:3]; 

И уменьшите продолжительность дуги анимации до 0,5f или что-то в этом роде. Я думаю, что использование короткого времени затухания кажется лучше, чем просто установить скрыть в YES

Мы реализовали что-то подобное в нашей библиотеке с открытым исходным кодом Raisin Toast . Программа установки довольно проста, как только вы добавляете файлы в свой проект:

Добавьте свойство в делегат вашего приложения:

 @property (strong, nonatomic) RZMessagingWindow *errorWindow; 

Создайте окно обмена сообщениями по умолчанию:

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

А затем одну строку, чтобы представить окно обмена сообщениями:

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

В демонстрационном проекте показаны некоторые из более сложных настроек добавления изображений и пользовательских стилей.

Реализация использует второй UIWindow, и из-за метода класса RZErrorMessenger он доступен повсеместно.

Я обработал его простым статическим методом UI Helper с помощью окна Key:

 +(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]; } ]; }]; } 

Может быть, это может помочь кому-то:

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

EDIT: для тех, кто использует Xamarin.IOS, вы можете сделать следующее:

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

Использование UIKit; необходимо.

Swift 2.0:

Используйте https://github.com/Rannie/Toast-Swift/blob/master/SwiftToastDemo/Toast/HRToast%2BUIView.swift .

Загрузите класс HRToast + UIView.swift и перетащите его в проект. Убедитесь, что вы установите флажок «копировать элементы, если необходимо» в диалоговом окне.

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

Если вы действительно хотите только внешний вид азбуки Android, попробуйте эту библиотеку, она хорошо работает, использовалась в нескольких моих приложениях

https://github.com/ecstasy2/toast-notifications-ios работает хорошо …

Цель C

 +(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]; } ];} 

стриж

Как сообщить тост в Свифт?

Решение Swift 3 готово для копирования пасты:

 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(); } } } 

Класс 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; } } } 

Это очень удобно, так как у него есть блок завершения, пожалуйста, посмотрите 🙂 https://github.com/PrajeetShrestha/EkToast

Я решил расстаться с более полным решением Xamarin.iOS / MonoTouch, которое отлично подходит для меня.

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

Если метод вызывается из фонового потока (а не основного потока пользовательского интерфейса), тогда требуется BeginInvokeOnMainThread, что означает просто вызвать его так.

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

Я знаю, что этот вопрос довольно старый, но я обнаружил, что здесь интересно то же самое, и я нашел решение, поэтому я решил поделиться с ним. Этот метод позволяет увольнять предупреждение после установленной вами временной задержки.

 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) } 

Если вы получите сообщение об ошибке, которое приведет к сбою вашего приложения, возможно, это связано с тем, что alertConroller запускается в фоновом потоке. Чтобы исправить это, оберните свой код следующим образом:

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

Этот метод позволяет отклонить сообщение, когда пользователь нажимает кнопку «ОК» под сообщением

 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) 
Intereting Posts
Как передать аргументы фрагмента при использовании пейджера представления с различными фрагментами / макетами? Чтение logcat программно в приложении Регистрация учетной записи PJSip Android SQLite: попытка повторного открытия уже закрытого объекта Android localStorage исчезает после стирания приложения из ОЗУ Использование частных стилей (не найден ресурс, соответствующий указанному имени) Поставщик сети генерирует 2 копии места CreateNewFile – open failed: ENOENT (Нет такого файла или каталога) Как Flurry предоставляет бесплатный аналитический сервис? Android Android TextView: изменение цвета текста при нажатии Ошибка очистки: SECURITY_ERR: исключение DOM 18 в файле: ///android_asset/www/js/DB.js Предложения по использованию Android Chat Невозможно выполнить dex: несколько файлов dex определяют Lcom / 9oldandroids / animation / Animator $ AnimatorListener; Как получить атрибуты с пространством имен «андроид» в пользовательском TextView Как изменить цвет делителя по умолчанию для всех списков ListViews