Когда я пишу приложения для Android, мне нравится функция Toast. Есть ли способ получить такой набор и забыть всплывающее сообщение в iPhone, используя MonoTouch (C# .NET)?Android Toast в iPhone?
ответ
Проверьте это:
https://github.com/ecstasy2/toast-notifications-ios
Edit: Проект переехал в GitHub, так что я обновить ссылку.
Вы ищете что-то наподобие UIAlertView
?
Нет, для этого требуется таймер, чтобы показать и скрыть. Что-то более простое, возможно, консервированный класс из сообщества Open Source. Тосты внутренне заботятся о большем количестве сантехники. –
Почему бы не создать класс, который завершает представление предупреждения и таймер? Возможно, вы могли бы открыть источник, который, таким образом, решает вашу проблему и, возможно, проблемы других людей. – Jasarien
Jasarien прав, проблема, которую вы хотите решить, довольно проста и также очень полезна, тосты рок. Это было бы большой помощью для сообщества. – blindstuff
Возможно, после Локальных уведомлений вы уверены, что они позволяют вам установить время, я думаю, что в эпоху времени нужно уволить. Не думайте, что есть способ скрыть их. Возможно, я не понимаю ваш вопрос, хотя я не знаком с Тостом.
MonoTouch Toast Version здесь. Вдохновленный Android.
Назвать,
ToastView t = new ToastView ("Email Sent", 1000);
t.Show();
Enum Файл:
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();
}
}
}
Я создал новое репо на github с классом, чтобы сделать оповещения в стиле тоста iOS. Мне не понравился тот, что был на code.google.com, он не вращался правильно и был некрасивым.
https://github.com/esilverberg/ios-toast
Наслаждайтесь людей.
Вот моя версия: http://github.com/scalessec/toast
Я думаю, что проще в использовании, потому что он реализован как Obj-C категории, тем самым добавляя методы makeToast к любому экземпляру UIView. например:
[self.view makeToast:@"This is some message as toast."
duration:3.0
position:@"bottom"];
Есть ли способ отключить родительское представление, чтобы пользователь не мог щелкнуть от тоста активности? Мне нужно, чтобы пользователь прекратил взаимодействие с приложением, пока отображается тост активности. (Только тост активности, остальное не нуждается в этом поведении.) – jkcl
Вы можете использовать эту ссылку для Objective-C код для 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
Это очень просто в использовании и выглядит красиво на прошивке 5/6 и прошивка 7, а также.
Just Вы можете использовать следующий код с uilabel и uianimation, чтобы получить тост как в Android. Это делает две работы один тост задача, и она увеличивает высоту метки в зависимости от длины текста с WordWrap IOS-позже link here
CGRect initialFrame = CGRectMake(20, self.view.frame.size.height/2,300, 40);
NSString *[email protected]"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);
});
Это блокирует взаимодействие пользователя до момента отображения Тоста, это не относится к Toast в Android. –
Спасибо, что комментировали. Как бы вы избежали этого? –
- 1. Android toast
- 2. Toast Сообщения в Android
- 3. Android: Пользовательский Toast Notification Inherit Default Toast
- 4. Kotlin для Android. Toast
- 5. Android - альтернатива сообщениям Toast
- 6. Android Toast не отображается
- 7. Android-Toast вместо действия
- 8. Android toast для UWP
- 9. Android Toast Error
- 10. Android get toast position
- 11. Android Toast Context Conundrum
- 12. Android: Нажмите Toast
- 13. Android Toast issue
- 14. Пользовательские Toast Раздувание - Android
- 15. Toast not shows - Android
- 16. Android: Toast и Edit.GetText
- 17. Настроить Android Talkback в Toast
- 18. Использование котировок в Android Toast
- 19. Как toast в ApplicationSyncAdapter Android?
- 20. Android Toast не отображается
- 21. Android toast не отображается
- 22. Android toast не появится
- 23. android Gps code toast
- 24. Toast .. on android
- 25. Android toast messages on iOS
- 26. Android, используя Toast внутри onClickListener
- 27. Toast не автозаполнение Android Studio
- 28. Android Toast Сообщения не работают
- 29. Android Force бросить CountDownTimer/Toast
- 30. android Toast and View help
Могу ли я проверить его на siumulator? Кажется, я не работаю для меня. Я создал тост в методе viewDidLoad моего контроллера. –
это работает на симуляторе. можете ли вы пройти образец кода. – clide313
Это действительно хорошо, но LGPL-лицензирован, поэтому вы не можете использовать его в приложении для iPhone, не делая все свои источники под LGPL тоже. Причина, по которой iPhone отличается от обычного: iPhone использует статические библиотеки. –