【问题标题】:Can we get an array of all storyboard views我们能得到所有故事板视图的数组吗
【发布时间】:2026-01-28 23:15:01
【问题描述】:

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

谢谢

是的

【问题讨论】:

  • 不,我们无法从 Storyboard 中获取 ViewController。如果需要,您可以实例化它们。你可以看看它是如何工作的developer.apple.com/library/ios/featuredarticles/…
  • 您的标题/描述说视图,但您的代码说视图控制器。它们不是同一件事。假设您在故事板中有 20 个视图控制器,您是否想为所有 20 个视图控制器添加一个进度视图,即使只有一个实例化且可见,而其他 19 个没有?这就是你所说的你想做的。描述你的问题,而不是你认为的解决方案。而您的问题不是您想向 所有 视图或视图控制器添加进度视图,您的问题可能是您想要将进度添加到 当前显示的查看?
  • 好的,谢谢您的帮助!如果有操作正在进行,我会去选择将 ProgressBar 放在 viewWillAppear 中。

标签: ios swift uiviewcontroller storyboard


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    为什么不创建一个具有 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

    【讨论】: