Как я могу обновить расширение индикатора выполнения?

#ios #swift #swift5

#iOS #swift #swift5

Вопрос:

У меня есть расширение, которое загружает индикатор выполнения внутри панели навигации.

 extension UINavigationController {

    public override func viewDidLoad() {
        super.viewDidLoad()

        let progressView = UIProgressView(progressViewStyle: .bar)
        self.view.addSubview(progressView)
        let navBar = self.navigationBar

        self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[navBar]-0-[progressView]", options: .directionLeadingToTrailing, metrics: nil, views: ["progressView" : progressView, "navBar" : navBar]))
        self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[progressView]|", options: .directionLeadingToTrailing, metrics: nil, views: ["progressView" : progressView]))

        progressView.translatesAutoresizingMaskIntoConstraints = false
        progressView.setProgress(0.0, animated: true)
        
    }
}
  

В моем классе UIViewController, как я могу обновить индикатор выполнения с помощью progressView.setProgress(0.0, animated: true) ? Я хочу увеличить значение до 0.1 из @IBAction.

Ответ №1:

Поскольку вы не можете использовать сохраненные свойства в расширениях, вам необходимо добавить способ идентификации представления прогресса, например, путем присвоения тега

 ...
let progressView = UIProgressView(progressViewStyle: .bar)
progressView.tag = 1024
self.view.addSubview(progressView)
...
  

Затем вы можете создать метод, который обновляет представление о ходе выполнения

 func updateProgressView(value: Float) {
    let progressView = view.subviews.first{$0.tag == 1024} as! UIProgressView
    progressView.setProgress(value, animated: true)
}
  

или

 func increaseProgress() {
    let progressView = view.subviews.first{$0.tag == 1024} as! UIProgressView
    progressView.progress  = 0.1
}