Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display activity indicator inside UIButton

I would like to change the content of a UIButton to an ActivityIndicator after it is pressed.

I know buttons have an imageView and a titleLabel, but I don't know how to put an activity indicator in any of them.

This is how I create activity indicators:

let aiView = UIActivityIndicatorView(activityIndicatorStyle: .Gray) aiView.startAnimating() aiView.center = CGPointMake(0,0) aiView.hidesWhenStopped = false 
like image 588
jood Avatar asked Apr 11 '16 04:04

jood


1 Answers

import UIKit  class LoadingButton: UIButton { private var originalButtonText: String? var activityIndicator: UIActivityIndicatorView!  func showLoading() {     originalButtonText = self.titleLabel?.text     self.setTitle("", for: .normal)          if (activityIndicator == nil) {         activityIndicator = createActivityIndicator()     }          showSpinning() }  func hideLoading() {     self.setTitle(originalButtonText, for: .normal)     activityIndicator.stopAnimating() }  private func createActivityIndicator() -> UIActivityIndicatorView {     let activityIndicator = UIActivityIndicatorView()     activityIndicator.hidesWhenStopped = true     activityIndicator.color = .lightGray     return activityIndicator }  private func showSpinning() {     activityIndicator.translatesAutoresizingMaskIntoConstraints = false     self.addSubview(activityIndicator)     centerActivityIndicatorInButton()     activityIndicator.startAnimating() }  private func centerActivityIndicatorInButton() {     let xCenterConstraint = NSLayoutConstraint(item: self, attribute: .centerX, relatedBy: .equal, toItem: activityIndicator, attribute: .centerX, multiplier: 1, constant: 0)     self.addConstraint(xCenterConstraint)          let yCenterConstraint = NSLayoutConstraint(item: self, attribute: .centerY, relatedBy: .equal, toItem: activityIndicator, attribute: .centerY, multiplier: 1, constant: 0)     self.addConstraint(yCenterConstraint) } } 
like image 123
Steve Rosenberg Avatar answered Sep 28 '22 19:09

Steve Rosenberg