Intereting Posts
API графиков для Android Как загрузить фоновый рисунок с использованием Picasso Неверные данные местоположения Android GPS по запросу Изменение размера видео в соответствии с VideoView Как создать два представления в Android, которые используют 50% высоты каждый, если только он меньше? Загрузить фотографию с помощью HttpPost MultiPartEntityBuilder Robolectric с использованием фрагментов и ActionBarCompat NullPointerException При нажатии кнопки DatePicker на моем устройстве (с личным приложением) Неожиданный префикс пространства имен «xmlns», найденный для фрагмента тега Неожиданный префикс пространства имен «карта», найденный для фрагмента тега Android java.lang.IllegalArgumentException: Нет такой службы ComponentInfo JobScheduler Пользовательские макеты уведомлений и цвета текста При запутывании с помощью ProGuard, -keepattribтрибуты SourceFile, LineNumberTable делают результирующий apk проще для обратной инженерии? Автономный вектор TileProvider, который расширяет карту google api v2 в android Spinner в панели действий с единственным значком, но не выбранным параметром Есть что-то вроде NSDictionary в android?

Android Toast в iPhone?

Когда я пишу приложения для Android, мне нравится функция Toast. Есть ли способ получить такой набор и забыть всплывающее сообщение в iPhone, используя MonoTouch (C # .NET)?

Solutions Collecting From Web of "Android Toast в iPhone?"

Проверь это:

https://github.com/ecstasy2/toast-notifications-ios

Изменить: проект переместился в github, поэтому я обновляю ссылку.

Версия MonoTouch Toast здесь. Вдохновленный Android.

Чтобы назвать это,

ToastView t = new ToastView ("Email Sent", 1000); t.Show (); 

Enum File:

 public enum ToastGravity { Top = 0, Bottom = 1, Center = 2 } 

Файл ToastSettings:

 using System; using System.Drawing; using MonoTouch.UIKit; namespace General { public class ToastSettings { public ToastSettings () { this.Duration = 500; this.Gravity = ToastGravity.Center; } public int Duration { get; set; } public double DurationSeconds { get { return (double) Duration/1000 ;} } public ToastGravity Gravity { get; set; } public PointF Position { get; set; } } } 

Основной класс Toast:

 using System; using MonoTouch.Foundation; using MonoTouch.UIKit; using System.Drawing; using MonoTouch.ObjCRuntime; namespace General { public class ToastView : NSObject { ToastSettings theSettings = new ToastSettings (); private string text = null; UIView view; public ToastView (string Text, int durationMilliseonds) { text = Text; theSettings.Duration = durationMilliseonds; } int offsetLeft = 0; int offsetTop = 0; public ToastView SetGravity (ToastGravity gravity, int OffSetLeft, int OffSetTop) { theSettings.Gravity = gravity; offsetLeft = OffSetLeft; offsetTop = OffSetTop; return this; } public ToastView SetPosition (PointF Position) { theSettings.Position = Position; return this; } public void Show () { UIButton v = UIButton.FromType (UIButtonType.Custom); view = v; UIFont font = UIFont.SystemFontOfSize (16); SizeF textSize = view.StringSize (text, font, new SizeF (280, 60)); UILabel label = new UILabel (new RectangleF (0, 0, textSize.Width + 5, textSize.Height + 5)); label.BackgroundColor = UIColor.Clear; label.TextColor = UIColor.White; label.Font = font; label.Text = text; label.Lines = 0; label.ShadowColor = UIColor.DarkGray; label.ShadowOffset = new SizeF (1, 1); v.Frame = new RectangleF (0, 0, textSize.Width + 10, textSize.Height + 10); label.Center = new PointF (v.Frame.Size.Width / 2, v.Frame.Height / 2); v.AddSubview (label); v.BackgroundColor = UIColor.FromRGBA (0, 0, 0, 0.7f); v.Layer.CornerRadius = 5; UIWindow window = UIApplication.SharedApplication.Windows[0]; PointF point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height / 2); if (theSettings.Gravity == ToastGravity.Top) { point = new PointF (window.Frame.Size.Width / 2, 45); } else if (theSettings.Gravity == ToastGravity.Bottom) { point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height - 45); } else if (theSettings.Gravity == ToastGravity.Center) { point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height / 2); } else { point = theSettings.Position; } point = new PointF (point.X + offsetLeft, point.Y + offsetTop); v.Center = point; window.AddSubview (v); v.AllTouchEvents += delegate { HideToast (null); }; NSTimer.CreateScheduledTimer (theSettings.DurationSeconds, HideToast); } void HideToast () { UIView.BeginAnimations (""); view.Alpha = 0; UIView.CommitAnimations (); } void RemoveToast () { view.RemoveFromSuperview (); } } } 

Вот моя версия: http://github.com/scalessec/toast

Я думаю, что его проще использовать, поскольку он реализован как категория obj-c, тем самым добавив методы makeToast в любой экземпляр UIView. например:

 [self.view makeToast:@"This is some message as toast." duration:3.0 position:@"bottom"]; 

Вы ищете что-то вроде UIAlertView ?

Вы можете использовать эту ссылку для объектного кода для Toast

http://code.google.com/p/toast-notifications-ios/source/browse/trunk/

Хотя эта ссылка для ее использования

http://code.google.com/p/toast-notifications-ios/wiki/HowToUse

Который может быть похож на любой из приведенных ниже образцов

 [[iToast makeText:NSLocalizedString(@"The activity has been successfully saved.", @"")] show]; [[[iToast makeText:NSLocalizedString(@"The activity has been successfully saved.", @"")] setGravity:iToastGravityBottom] show]; [[[[iToast makeText:NSLocalizedString(@"Something to display a very long time", @"")] etGravity:iToastGravityBottom] setDuration:iToastDurationLong] show]; 

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

Я добавил небольшую модификацию в класс тостов, который обрабатывает вращение дисплея.

  public void Show () { UIButton v = UIButton.FromType (UIButtonType.Custom); view = v; UIFont font = UIFont.SystemFontOfSize (16); SizeF textSize = view.StringSize (text, font, new SizeF (280, 60)); UILabel label = new UILabel (new RectangleF (0, 0, textSize.Width + 5, textSize.Height + 5)); label.BackgroundColor = UIColor.Clear; label.TextColor = UIColor.White; label.Font = font; label.Text = text; label.Lines = 0; label.ShadowColor = UIColor.DarkGray; label.ShadowOffset = new SizeF (1, 1); v.Frame = new RectangleF (0, 0, textSize.Width + 10, textSize.Height + 10); label.Center = new PointF (v.Frame.Size.Width / 2, v.Frame.Height / 2); v.AddSubview (label); v.BackgroundColor = UIColor.FromRGBA (0, 0, 0, 0.7f); v.Layer.CornerRadius = 5; UIWindow window = UIApplication.SharedApplication.Windows[0]; PointF point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height / 2); if (theSettings.Gravity == ToastGravity.Top) { point = new PointF (window.Frame.Size.Width / 2, 45); } else if (theSettings.Gravity == ToastGravity.Bottom) { point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height - 45); } else if (theSettings.Gravity == ToastGravity.Center) { point = new PointF (window.Frame.Size.Width / 2, window.Frame.Size.Height / 2); } else { point = theSettings.Position; } point = new PointF (point.X + offsetLeft, point.Y + offsetTop); v.Center = point; //handle screen rotation float orientation=0; switch(UIApplication.SharedApplication.StatusBarOrientation) { case UIInterfaceOrientation.LandscapeLeft: orientation=-90; break; case UIInterfaceOrientation.LandscapeRight: orientation=90; break; case UIInterfaceOrientation.PortraitUpsideDown: orientation=180; break; } v.Transform=CGAffineTransform.MakeRotation ((float)(orientation / 180f * Math.Pi)); window.AddSubview (v); v.AllTouchEvents += delegate { HideToast (); }; NSTimer.CreateScheduledTimer (theSettings.DurationSeconds, HideToast); } 

Вы можете попробовать мою библиотеку с открытым исходным кодом TSMessages: https://github.com/toursprung/TSMessages

Он очень прост в использовании и выглядит красиво на iOS 5/6 и на iOS 7.

Просто вы можете использовать следующий код с uilabel и uianimation для получения тоста, как в android. Он выполняет две работы, одну из которых – это задача для тоста, и она увеличивает высоту метки в соответствии с длиной текста с помощью словаря IOS 7 позже.

 CGRect initialFrame = CGRectMake(20, self.view.frame.size.height/2,300, 40); NSString *message=@"Toast in Iphone as in Android"; UILabel *flashLabel=[[UILabel alloc] initWithFrame:initialFrame]; flashLabel.font=[UIFont fontWithName:@"Optima-Italic" size:12.0]; flashLabel.backgroundColor=[UIColor whiteColor]; flashLabel.layer.cornerRadius=3.0f; flashLabel.numberOfLines=0; flashLabel.textAlignment=NSTextAlignmentCenter; CGSize maxSize = CGSizeMake(flashLabel.frame.size.width, MAXFLOAT); CGRect labelRect = [message boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:flashLabel.font} context:nil]; //adjust the label the the new height. CGRect newFrame = flashLabel.frame; newFrame.size.height = labelRect.size.height; flashLabel.frame = newFrame; flashLabel.text=message; [self.view addSubview:flashLabel]; flashLabel.alpha=1.0; self.view.userInteractionEnabled=FALSE; [UIView animateWithDuration:13.0 animations:^ { flashLabel.alpha=0.0f; } completion:^(BOOL finished) { self.view.userInteractionEnabled=TRUE; [flashLabel removeFromSuperview]; }]; 

Я изменил ответ Джона следующим образом:

Toast.h

 @interface Toast : NSObject + (void)toast:(NSString *)message :(UIView *) view :(int)delay; @end 

Toast.m

 #import "Toast.h" @interface Toast () @end @implementation Toast + (void)toast:(NSString *)message :(UIView *) view :(int)delay { CGRect initialFrame = CGRectMake(10, view.frame.size.height/2, 300, 40); UILabel *flashLabel=[[UILabel alloc] initWithFrame:initialFrame]; flashLabel.font=[UIFont fontWithName:@"Optima-Italic" size:19.0]; flashLabel.backgroundColor=[UIColor whiteColor]; flashLabel.layer.cornerRadius=9.0f; flashLabel.clipsToBounds = YES; flashLabel.numberOfLines=3; flashLabel.textAlignment=NSTextAlignmentCenter; CGSize maxSize = CGSizeMake(flashLabel.frame.size.width, MAXFLOAT); CGRect labelRect = [message boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:flashLabel.font} context:nil]; //adjust the label the the new height. CGRect newFrame = flashLabel.frame; newFrame.size.height = labelRect.size.height * 2; flashLabel.frame = newFrame; flashLabel.text=message; [view addSubview:flashLabel]; flashLabel.alpha=1.0; view.userInteractionEnabled=FALSE; [UIView animateWithDuration:delay animations:^ { flashLabel.alpha=0.0f; } completion:^(BOOL finished) { view.userInteractionEnabled=TRUE; [flashLabel removeFromSuperview]; }]; } @end 

Мне очень нравится решение 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); }); 

Я создал новое репо на github с классом, чтобы сделать iOS-оповещения в стиле тоста. Мне не понравился тот, что был на code.google.com, он не вращался правильно и был некрасивым.

https://github.com/esilverberg/ios-toast

Наслаждайтесь людьми.