Displaying a message in iOS which has the same functionality as Toast in Android

前端 未结 19 1698
逝去的感伤
逝去的感伤 2020-12-12 12:35

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

相关标签:
19条回答
  • 2020-12-12 13:23

    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:

    1. Android like Toast message
    2. Still iOS Look&Feel
    0 讨论(0)
  • 2020-12-12 13:25
    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)
    }
    
    0 讨论(0)
  • 2020-12-12 13:27

    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:

    0 讨论(0)
  • 2020-12-12 13:27

    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."];
    
    0 讨论(0)
  • 2020-12-12 13:28

    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)];
    
    0 讨论(0)
  • 2020-12-12 13:29

    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()
        }
      }
    }
    
    0 讨论(0)
提交回复
热议问题