I need to know if there is any method in iOS which behaves like Toast messages in Android. That is, I need to display a message which is dismissed automatically after few se
Swift 3
For a simple solution without third party code:
Just use a normal UIAlertController but with style = actionSheet (look at code down below)
let alertDisapperTimeInSeconds = 2.0
let alert = UIAlertController(title: nil, message: "Toast!", preferredStyle: .actionSheet)
self.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + alertDisapperTimeInSeconds) {
alert.dismiss(animated: true)
}
The advantage of this solution:
NSString *message = @"Some message...";
UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
message:message
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:nil, nil];
[toast show];
int duration = 1; // duration in seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[toast dismissWithClickedButtonIndex:0 animated:YES];
});
Using UIAlertViewController for iOS 9 or later
NSString *message = @"Some message...";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
message:message
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
int duration = 1; // duration in seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[alert dismissViewControllerAnimated:YES completion:nil];
});
Swift 3.2
let message = "Some message..."
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
self.present(alert, animated: true)
// duration in seconds
let duration: Double = 5
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
alert.dismiss(animated: true)
}
If you want one with iOS Style, download this framework from Github
iOS Toast Alert View Framework
This examples work on you UIViewController, once you imported the Framework.
Example 1:
//Manual
let tav = ToastAlertView()
tav.message = "Hey!"
tav.image = UIImage(named: "img1")!
tav.show()
//tav.dismiss() to Hide
Example 2:
//Toast Alert View with Time Dissmis Only
self.showToastAlert("5 Seconds",
image: UIImage(named: "img1")!,
hideWithTap: false,
hideWithTime: true,
hideTime: 5.0)
Final:
1) Download toast-notifications-ios from this link
2) go to Targets -> Build Phases and add -fno-objc-arc to the "compiler Sources" for relevant files
3) make a function and #import "iToast.h"
-(void)showToast :(NSString *)strMessage {
iToast * objiTost = [iToast makeText:strMessage];
[objiTost setFontSize:11];
[objiTost setDuration:iToastDurationNormal];
[objiTost setGravity:iToastGravityBottom];
[objiTost show];
}
4) call where you need to display toast message
[self showToast:@"This is example text."];
Here's your solution :
Put Below code into your Xcode project and enjoy,
- (void)showMessage:(NSString*)message atPoint:(CGPoint)point {
const CGFloat fontSize = 16;
UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont fontWithName:@"Helvetica-Bold" size:fontSize];
label.text = message;
label.textColor = UIColorFromRGB(0x07575B);
[label sizeToFit];
label.center = point;
[self.view addSubview:label];
[UIView animateWithDuration:0.3 delay:1 options:0 animations:^{
label.alpha = 0;
} completion:^(BOOL finished) {
label.hidden = YES;
[label removeFromSuperview];
}];
}
How to use ?
[self showMessage:@"Toast in iOS" atPoint:CGPointMake(160, 695)];
This is how I have done in Swift 3.0. I created UIView extension and calling the self.view.showToast(message: "Message Here", duration: 3.0) and self.view.hideToast()
extension UIView{
var showToastTag :Int {return 999}
//Generic Show toast
func showToast(message : String, duration:TimeInterval) {
let toastLabel = UILabel(frame: CGRect(x:0, y:0, width: (self.frame.size.width)-60, height:64))
toastLabel.backgroundColor = UIColor.gray
toastLabel.textColor = UIColor.black
toastLabel.numberOfLines = 0
toastLabel.layer.borderColor = UIColor.lightGray.cgColor
toastLabel.layer.borderWidth = 1.0
toastLabel.textAlignment = .center;
toastLabel.font = UIFont(name: "HelveticaNeue", size: 17.0)
toastLabel.text = message
toastLabel.center = self.center
toastLabel.isEnabled = true
toastLabel.alpha = 0.99
toastLabel.tag = showToastTag
toastLabel.layer.cornerRadius = 10;
toastLabel.clipsToBounds = true
self.addSubview(toastLabel)
UIView.animate(withDuration: duration, delay: 0.1, options: .curveEaseOut, animations: {
toastLabel.alpha = 0.95
}, completion: {(isCompleted) in
toastLabel.removeFromSuperview()
})
}
//Generic Hide toast
func hideToast(){
if let view = self.viewWithTag(self.showToastTag){
view.removeFromSuperview()
}
}
}