我们可以获得所有故事板视图的数组

时间:2015-05-20 14:43:31

标签: ios swift uiviewcontroller storyboard

我在Swift中开发应用程序。 这个应用程序有很多视图,我想在所有视图上放置一个UIProgressView

我们可以获得所有故事板视图的数组吗?

例如:

    self.progressBar = UIProgressView(progressViewStyle: .Bar)
    self.progressBar?.center = view.center
    self.progressBar?.frame = CGRect(x: 0, y: 20, width: view.frame.width, height: CGFloat(1))
    self.progressBar?.progress = 1/2
    self.progressBar?.trackTintColor = UIColor.lightGrayColor();
    self.progressBar?.tintColor = UIColor.redColor();

    var arrayViewController : [UIViewController] = [...,...,...]

    for controller in arrayViewController {
        controller.view.addSubview(self.progressBar)
    }

谢谢

Ysée

2 个答案:

答案 0 :(得分:0)

我认为你真正想要的是如果正在进行的操作,就会在每个视图上显示进度。

有很多方法可以做到这一点(使用委托,NSNotificationCenter,......)但我能想到的最简单的方法是依赖viewWillAppear

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    // Check if there's an operation in progress and add progressView if relevant
}

对于用户来说,它实际上看起来像是将进度视图添加到所有视图。

答案 1 :(得分:0)

为什么不创建lazy stored property类型为UIProgressView的基类?您可以选择使用两种方法setProgressViewHidden(hidden : Bool)来轻松显示和隐藏进度视图,并setProgress(progress : Float)更新进度。然后,所有视图控制器都可以对此基类进行子类化,并方便地与进度视图进行交互。

    class ProgressViewController : UIViewController {

         lazy var progressView : UIProgressView = {
            [unowned self] in

            var view = UIProgressView(frame: CGRectMake(0, 20, self.view.frame.size.width, 3))
            view.progress = 0.5
            view.trackTintColor = UIColor.lightGrayColor()
            view.tintColor = UIColor.redColor()

            self.view.addSubview(view)

            return view
        }()
    }

要阅读有关延迟存储属性的更多信息,请查看:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html