Не удается добавить UIActivityIndicatorView в подкласс UIButton

У меня есть UIButtonподкласс, который будет инициализирован из раскадровки, я не использую Xib. Я хочу добавить UIActivityIndicatorViewпрограммно. Мой код выглядит следующим образом: import UIKit

class ResendConfirmButton: UIButton {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        configActivityIndicator()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        configStyling()

    }


    func configStyling() {
        let buttonLayer = CAShapeLayer()
        let buttonPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: [UIRectCorner.bottomLeft, UIRectCorner.bottomRight], cornerRadii: CGSize(width: 2.0, height: 2.0))
        buttonLayer.path = buttonPath.cgPath
        buttonLayer.frame = bounds
        layer.mask = buttonLayer
    }

    var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .white)

    func configActivityIndicator() {
        activityIndicator.center = CGPoint(x: bounds.midX, y: bounds.midY)
        addSubview(activityIndicator)
        activityIndicator.startAnimating()
    }


}

Однако индикатор активности почему-то не добавляется. Я пытался двигатьсяconfigActivityIndicatorlayoutSubviews, но это также не работает. Где правильное место для вызова этого метода и сохранения кнопки автономным?

2 ответа

  1. в макете подвидов код похож на приведенный ниже…

    var activityIndicator = UIActivityIndicatorView()
    activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)
     activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
                activityIndicator.startAnimating()
                self.addSubview(activityIndicator)
    

    Все еще любая проблема чувствует свободной спросить меня

  2. Просто попробуйте изменить позицию индикатора в centerIndicatorInButton()

    class ResendConfirmButton: UIButton {
    
    var buttonText: String?
    var activityIndicator: UIActivityIndicatorView!
    
    func showLoading() {
        buttonText = self.titleLabel?.text
        self.setTitle("", forState: UIControlState.Normal)
    
        if (activityIndicator == nil) {
            activityIndicator = UIActivityIndicatorView()
          activityIndicator.hidesWhenStopped = true
          activityIndicator.color = UIColor.lightGrayColor()
        }
    
        // showSpinning
        activityIndicator.translatesAutoresizingMaskIntoConstraints = false
        self.addSubview(activityIndicator)
        centerIndicatorInButton()
        activityIndicator.startAnimating()
    }
    
    func hideLoading() {
        self.setTitle(buttonText, forState: UIControlState.Normal)
        activityIndicator.stopAnimating()
    }
    
    private func centerIndicatorInButton() {
        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)
    }
    
    }