我们能得到所有故事板视图的数组吗

Can we get an array of all storyboard views

我正在 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)
    }

谢谢

是的

我假设您真正想要的是在每个视图上显示进度(如果有操作正在进行)。

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

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

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

对于用户来说,它看起来就像您将进度视图添加到所有视图一样。

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

    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