在许多VC中使用活动指示器而不重复代码swift

时间:2016-07-19 11:50:45

标签: ios swift

我在快速IOS中有两个ViewControllers(A和B)。 A和B都从互联网(单独)加载数据。我想在加载时显示activityIndicator。我知道我可以通过在每个VC中声明一次来做坏事,如下所示

ViewController A

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    disableUserInteraction()

    greyView = UIView()
    greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
    greyView.backgroundColor = UIColor.blackColor()
    greyView.alpha = 0.5
    self.view.addSubview(greyView)
}

func activityIndicatorEnd() {
    self.activityIndicator.stopAnimating()
    enableUserInteraction()
    self.greyView.removeFromSuperview()
}

并对ViewController B执行完全相同的操作,并调用在B视图控制器中声明的activityIndi​​catorBegin和activityIndi​​catorEnd函数。但是,我想让代码更清晰。怎么可能呢?我这些天试图让代码更清洁。

谢谢,

- UPDATE -

我会想象下面的代码会起作用。但它并不是因为我无法在扩展中声明变量

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

extension UIViewController {
    func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    disableUserInteraction()

    greyView = UIView()
    greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
    greyView.backgroundColor = UIColor.blackColor()
    greyView.alpha = 0.5
    self.view.addSubview(greyView)
}

func activityIndicatorEnd() {
    self.activityIndicator.stopAnimating()
    enableUserInteraction()
    self.greyView.removeFromSuperview()
    }
}

2 个答案:

答案 0 :(得分:4)

创建一个BaseViewController并添加这两个方法,并在activityIndicator内声明BaseViewController个对象。现在将BaseViewController作为所有ViewController的父类。之后,如果你想添加指标,只需像这样调用

1)创建BaseViewController

class BaseViewController: UIViewController {
    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func activityIndicatorBegin() {
        activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        disableUserInteraction()

        greyView = UIView()
        greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
        greyView.backgroundColor = UIColor.blackColor()
        greyView.alpha = 0.5
        self.view.addSubview(greyView)
    }

    func activityIndicatorEnd() {
        self.activityIndicator.stopAnimating()
        enableUserInteraction()
        self.greyView.removeFromSuperview()
    }
}

2)现在将此BaseViewController指定为您的所有viewController的父级

class ViewController1: BaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //Now if you want to add activityIndicator call like this
        self.activityIndicatorBegin()
        //or if you want remove activityIndicator 
        self.activityIndicatorEnd()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    } 
}

答案 1 :(得分:0)

您是否尝试使用可在A和B类中复制的所有代码创建一个基本项?如果这些类做的完全不同,你可以添加活动指示符的扩展名