HardCode
HardCode

Reputation: 2025

How to use UIActivityIndicatorView on custom UIButton?

I want to use UIActivityIndicatorView on my custom UIButton.

Here is my code:

if (sender.tag == 1) 
{
    // Start animating
    activityIndicator.hidden = NO;
    [activityIndicator startAnimating];

    // Check if the network is available
    if ([self reachable]) {
        // Stop animating
        activityIndicator.hidden = YES;
        [activityIndicator stopAnimating];
     }
  }

What I want to do here is: Once the user touch the button, I want to start the ActivityIndicatior while Reachable checking the network availability. Once it done pass it to the next view.

Update UIActivityIndicator is on top of my custom UIButton. It build successfully, but ActivityIndicator is not showing when I touch the button.

Upvotes: 0

Views: 1568

Answers (2)

Jan ATAC
Jan ATAC

Reputation: 1262

I'm sure you had your answer since then. After 4 years, language has changed to Swift, but I had the same problem : UIActivityIndicatorView is not showing when I add it through :

    self.myButton.addSubview(self.myIndicatorView)

I had to climb a level up :

    self.myButton.superview!.addSubview(self.myIndicatorView)

Upvotes: 1

bryce
bryce

Reputation: 706

Assuming everything else is correct in your project, the problem here is that you're showing and hiding an activity indicator in the same event loop, without giving a pause to draw it. Let me explain:

If you have the code:

UIView* view = someView; 
view.backgroundColor = [UIColor redColor];

// various synchronous operations

view.backgroundColor = [UIColor yellowColor];

The view will only ever have a background color of yellow.

To answer your question, you probably want to animate the spinner, do some asynchronous operation, then stop the animation. The key being to not stall on the main event loop while your asynchronous task is running. If your comfortable with blocks it would look something like this:

if (sender.tag == 1) {

    // Start animating
    activityIndicator.hidden = NO;
    [activityIndicator startAnimating];

    // Check if the network is available
    [self checkReachableWithCallback:^{
        // Stop animating
        activityIndicator.hidden = YES;
        [activityIndicator stopAnimating];
    }];

}

Upvotes: 0

Related Questions