How can I show alertview with activity indicator?

后端 未结 7 2218
青春惊慌失措
青春惊慌失措 2020-11-30 09:52

I want to show alertview with message: \"Loading data\" and spinning activity indicator. How can I do this?

相关标签:
7条回答
  • 2020-11-30 10:23

    In Swift 3

    let loadingAlertController = UIAlertController(title: "Loading", message: nil, preferredStyle: .alert)
    
    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
    activityIndicator.translatesAutoresizingMaskIntoConstraints = false
    
    loadingAlertController.view.addSubview(activityIndicator)
    
    let xConstraint = NSLayoutConstraint(item: activityIndicator, attribute: .centerX, relatedBy: .equal, toItem: loadingAlertController.view, attribute: .centerX, multiplier: 1, constant: 0)
    
    let yConstraint = NSLayoutConstraint(item: activityIndicator, attribute: .centerY, relatedBy: .equal, toItem: loadingAlertController.view, attribute: .centerY, multiplier: 1.4, constant: 0)
    
    NSLayoutConstraint.activate([ xConstraint, yConstraint])
    
    activityIndicator.isUserInteractionEnabled = false
    activityIndicator.startAnimating()
    
    let height: NSLayoutConstraint = NSLayoutConstraint(item: loadingAlertController.view, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 80)
    
    loadingAlertController.view.addConstraint(height);
    
    self.present(loadingAlertController, animated: true, completion: nil)
    
    0 讨论(0)
  • 2020-11-30 10:24

    NOTE: This solution won't work on iOS 7 and above.

    This is my take on it:

    alertView = [[UIAlertView alloc] initWithTitle:@"Submitting Entry"
                                           message:@"\n"
                                          delegate:self
                                 cancelButtonTitle:nil
                                 otherButtonTitles:nil];
    
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];   
    spinner.center = CGPointMake(139.5, 75.5); // .5 so it doesn't blur
    [alertView addSubview:spinner];
    [spinner startAnimating];
    [alertView show];
    

    and dismiss in code using:

    [alertView dismissWithClickedButtonIndex:0 animated:YES];
    
    0 讨论(0)
  • 2020-11-30 10:24

    Add This in your .h file UIAlertView *connectingAlert;

    And Add these two functions in your .m files

    //show loading activity.
    - (void)startSpinner:(NSString *)message {
        //  Purchasing Spinner.
        if (!connectingAlert) {
            connectingAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(message,@"")
                                                     message:nil
                                                    delegate:self
                                           cancelButtonTitle:nil
                                           otherButtonTitles:nil];
            connectingAlert.tag = (NSUInteger)300;
            [connectingAlert show];
    
            UIActivityIndicatorView *connectingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
            connectingIndicator.frame = CGRectMake(139.0f-18.0f,50.0f,37.0f,37.0f);
            [connectingAlert addSubview:connectingIndicator];
            [connectingIndicator startAnimating];
    
        }
    }
    //hide loading activity.
    - (void)stopSpinner {
        if (connectingAlert) {
            [connectingAlert dismissWithClickedButtonIndex:0 animated:YES];
            connectingAlert = nil;
        }
        // [self performSelector:@selector(showBadNews:) withObject:error afterDelay:0.1];
    }
    

    then call

    [self startSpinner:@"Your message........"];
    [self stopSpinner];
    
    0 讨论(0)
  • 2020-11-30 10:34

    you can add a label and activityindicator as subviews of your alert view. you have to do some thing like this...

    - (IBAction)showAlertWithActivity:(id)sender{
    
    alerta = [[UIAlertView alloc] initWithTitle:@"Guardando datos..."
                                                message:@"\n"
                                               delegate:self
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil];
    
            UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
            spinner.center = CGPointMake(139.5, 75.5); // .5 so it doesn't blur
            [alerta addSubview:spinner];
            [spinner startAnimating];
            [alerta show];
    
    
            [self performSelector:@selector(close) withObject:self afterDelay:1];
    
    
        }
        -(void)close{
    
            [alerta dismissWithClickedButtonIndex:0 animated:YES];
    
        }
    
    0 讨论(0)
  • 2020-11-30 10:36

    you can add a label and activityindicator as subviews of your alert view. you have to do some thing like this

    myAlertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:@"\n\n"
                                            delegate:self
                                   cancelButtonTitle:@""
                                   otherButtonTitles:@"OK", nil];  
    
    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc]
                    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];   
    loading.frame=CGRectMake(150, 150, 16, 16);
    [myAlertView addSubview:loading];
    [myAlertView show];
    

    ..better to use a UIActionSheet in this situation...

    0 讨论(0)
  • 2020-11-30 10:36

    This works on iOS 7

    addSubView doesn't work on UIAlertView in iOS 7 and above. Try this instead

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading data" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles: nil];
    
    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [indicator startAnimating];
    
    [alertView setValue:indicator forKey:@"accessoryView"];
    [alertView show];
    

    and to dismiss it

    [alertView dismissWithClickedButtonIndex:0 animated:YES];
    
    0 讨论(0)
提交回复
热议问题