当前位置: 首页 > 知识库问答 >
问题:

何时访问UIViewController生命周期中的子视图属性?

阎慈
2023-03-14

问题的背景:

我试图通过在序列图像板最顶端的viewcontroller中放置三个UIView来学习如何在Xcode 6中使用序列图像板。其中一个UIView是蓝色的,一个是红色的,还有一个是黄色的。我正在尝试通过更改其中一个UIView的背景色,以编程方式更改UIView的颜色。通过命令单击UIViewController类并查看要覆盖的适当函数,我确定“ViewDidDisplay”是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的属性,我必须重写什么函数?这样做的最佳实践方法是什么?

编辑:

我正在使用故事板,因此在UIViewController类的开头声明了我的三个UIView:

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

似乎没有一个视图实际上是初始化的,当viewdidLoad被调用时,因为下面一行代码的结果

println("\(bottomView?)")

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

共有1个答案

扶冠宇
2023-03-14

这最好在viewdiLoad中完成。当视图被添加到视图层次结构中,但是它还没有被启动时,将调用viewdiEmerar。当视图被分配到内存中时,将调用viewdiLoad。根据viewdiLoad的文档:

您通常会覆盖此方法,以便对从nib文件加载的视图执行附加初始化

您应该重写viewdiLoad并在那里修改您的UIView

 类似资料:
  • 本文向大家介绍UIViewController 的生命周期相关面试题,主要包含被问及UIViewController 的生命周期时的应答技巧和注意事项,需要的朋友参考一下 1.通过alloc init分配内存,初始化controller. 2.loadView (loadView方法默认实现[super loadView] 如果在初始化controller吋指定了xib文件名,就会根据传入的xib

  • 本文向大家介绍iOS UIViewController的完整生命周期相关面试题,主要包含被问及iOS UIViewController的完整生命周期时的应答技巧和注意事项,需要的朋友参考一下 UIViewController的完整生命周期 -[ViewControllerinitWithNibName:bundle:]; -[ViewControllerinit]; -[ViewControlle

  • 这个页面中:检验相关、检查相关是两个选项卡,点击某一个,会默认按七天去接口拿数据,也就是说这个页面一打开,就需要调用数据叫下面的数据显示,我想要的效果是第一次打开会调数据拿数据,如果去其它页面再回到这个页面会就保留着之前的数据,不再去重新调用,除非客户做了某个操作再去调数据,这个应该用到哪个生命周期,我试了onReady好像也没行。

  • 我不知道这是否是搜索“在子视图中添加UIViewController”的正确键。正如您在我的图像中看到的,有两个ViewController,主控制器和第二个控制器。主控制器内部有一个UIView(蓝色背景色)。在UIView中,我想在UIView中添加第二个ViewController。我有这个代码,但不起作用。 这是我的密码 我想知道这是否可行?我知道在xib文件中工作,我不知道在google

  • 注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch  在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa

  • 我们大致为WebAPplication设计了4个生命周期: 请求初始化其实就是从URL中解析提取出{module}, {action}, {method}; 然后再根据{module}, {action}, {method}找到对应的Controller文件; 然后再调用对应的{method},完了之后再发送响应。当然响应的过程中肯定是要顺带着解析下模板标签啦。 恩,这就完了,貌似感觉很简单啊。