What is the android.widget.Toast equivalent for iOS applications?
I've been writing for Android for a long time and I am missing Toast. I've implemented one. Need code? here you are:
ToastView.h
#import <UIKit/UIKit.h>@interface ToastView : UIView@property (strong, nonatomic) NSString *text;+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;@end
ToastView.m
#import "ToastView.h"@interface ToastView ()@property (strong, nonatomic, readonly) UILabel *textLabel;@end@implementation ToastView@synthesize textLabel = _textLabel;float const ToastHeight = 50.0f;float const ToastGap = 10.0f;- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code } return self;}-(UILabel *)textLabel{ if (!_textLabel) { _textLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 5.0, self.frame.size.width - 10.0, self.frame.size.height - 10.0)]; _textLabel.backgroundColor = [UIColor clearColor]; _textLabel.textAlignment = NSTextAlignmentCenter; _textLabel.textColor = [UIColor whiteColor]; _textLabel.numberOfLines = 2; _textLabel.font = [UIFont systemFontOfSize:13.0]; _textLabel.lineBreakMode = NSLineBreakByCharWrapping; [self addSubview:_textLabel]; } return _textLabel;}- (void)setText:(NSString *)text{ _text = text; self.textLabel.text = text;}+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;{ //Count toast views are already showing on parent. Made to show several toasts one above another int toastsAlreadyInParent = 0; for (UIView *subView in [parentView subviews]) { if ([subView isKindOfClass:[ToastView class]]) { toastsAlreadyInParent++; } } CGRect parentFrame = parentView.frame; float yOrigin = parentFrame.size.height - (70.0 + ToastHeight * toastsAlreadyInParent + ToastGap * toastsAlreadyInParent); CGRect selfFrame = CGRectMake(parentFrame.origin.x + 20.0, yOrigin, parentFrame.size.width - 40.0, ToastHeight); ToastView *toast = [[ToastView alloc] initWithFrame:selfFrame]; toast.backgroundColor = [UIColor darkGrayColor]; toast.alpha = 0.0f; toast.layer.cornerRadius = 4.0; toast.text = text; [parentView addSubview:toast]; [UIView animateWithDuration:0.4 animations:^{ toast.alpha = 0.9f; toast.textLabel.alpha = 0.9f; }completion:^(BOOL finished) { if(finished){ } }]; [toast performSelector:@selector(hideSelf) withObject:nil afterDelay:duration];}- (void)hideSelf{ [UIView animateWithDuration:0.4 animations:^{ self.alpha = 0.0; self.textLabel.alpha = 0.0; }completion:^(BOOL finished) { if(finished){ [self removeFromSuperview]; } }];}@end
Call from ViewController
[ToastView showToastInParentView:self.view withText:@"What a toast!" withDuaration:5.0];
There is no class "out-of-the-box" in UIKit to do this. But it is quite easy to create a class that will offer this behavior.
You just have to create a class that inherit from UIView. This class will have the responsibility - to create what you want to display, - to add itself in parent view hierarchy - to dismiss itself using a timer.
You will be able to use it like :
[ToastView toastViewInView:myParentView withText:@"what a wonderful text"];
Regards,Quentin