【问题标题】:When to access subview properties in UIViewController Lifecycle?何时访问 UIViewController Lifecycle 中的子视图属性?
【发布时间】:2014-09-17 16:57:00
【问题描述】:

问题背景:

我正在尝试通过将三个 UIView 放置在情节提要的最顶层视图控制器中来学习如何在 Xcode 6 中使用情节提要。 UIView 的一个是蓝色的,一个是红色的,一个是黄色的。我想看看是否可以通过更改其中一个 UIView 的背景颜色以编程方式更改 UIView。通过 Command + 单击 UIViewController 类并查看要覆盖的适当函数,我确定“viewDidAppear”是 UIViewController 在其设置代码中调用的最终函数。

问题:

这是我对函数的重写:

override func viewDidAppear(animated: Bool) {
    self.bottomView!.backgroundColor = UIColor.blackColor()
    super.viewDidAppear(animated)
}

但是,当我运行此代码时,带有三个 UIView 的屏幕会出现一瞬间,没有黑色 UIView,然后继续崩溃并出现

"fatal error: unexpectedly found nil while unwrapping an Optional value"

问题:

我必须重写什么函数才能以编程方式更改 UIView 的属性?这样做的最佳实践方法是什么?

编辑:

我正在使用 Storyboard,所以我的三个 UIView 是在我的 UIViewController 类的开头声明的:

@IBOutlet var topLeftView: UIView?
@IBOutlet var topRightView: UIView?
@IBOutlet var bottomView: UIView?

似乎在调用 viewDidLoad 时实际上没有初始化任何视图,因为以下代码行的结果

println("\(bottomView?)")

是“零”。这怎么没有被初始化?

【问题讨论】:

    标签: uiviewcontroller swift lifecycle


    【解决方案1】:

    最好在viewDidLoad 中完成。 viewDidAppear 在视图添加到视图层次结构时调用,但尚未启动。 viewDidLoad 在视图被分配到内存时被调用。根据viewDidLoad 的文档:

    You usually override this method to perform additional initialization on views that were loaded from nib files

    您应该覆盖viewDidLoad 并在其中修改您的UIView

    【讨论】:

    • 我根据您的建议编辑了最初的帖子。
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2010-10-13
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多