说说UIViewController 那些事儿(上)

控制器view的多种创建方式

  1. 控制器View的多种创建方式
    首先需要自定义控制器view,作为根控制器

    1. 通过没有没有同名的xib情况下alloc init创建的View
      JHViewController* vc = [[JHViewController alloc] init];

      • 结果:View的样式是空白的(透明)
    2. 通过storyb创建,箭头所指向的控制器

    UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    JHViewController* vc = [sb instantiateInitialViewController];
    • 结果:View的样式和storyboard描述的一样

      1. 通过xib方式创建View
        JHViewController* vc = [[JHViewController alloc] initWithNibName:@"Test"

        • 结果:view的样式跟xib描述一致
      2. 有同名xib情况
        // 但是创建的时候 不用使用 initwithnibname的方法
        JHViewController* vc = [[JHViewController alloc] init];

        • 结果:默认加载的是 files owner的view的连线的view
      3. 有同名去掉controller的情况
        JHViewController* vc = [[JHViewController alloc] init];

        • 结论:优先级会比同名xib高
      4. loadview
        • 卸载控制器中,用来重写控制器的view,优先级最高
        重写控制器的loadView,不会去加载storyboard.

    • loadView方法
    * loadView作用:一般用来创建自定义的view
    * loadView什么时候调用:当控制器的view没有创建的时候,就会调用loadView 去创建控制器的view.
    * loadView的默认做法:会去加载UIStoryboard描述的控制器的view

    *  如果重写了loadView方法,
        § 并且没有调用默认的操作,就不会加载UIStoryboard描述的控制器。
        § 就不会自动创建控制器的view,必须自己自定义控制器的view。就不会自动创建控制器的view,必须自己自定义控制器的view。
        § 并且没有创建控制器的view,就不能获取控制器的view,否则会造成死循环。
    *  如果控制器是窗口的根控制器,可以不用设置尺寸,系统默认会设置尺寸。
    
    *  loadView使用注意:如果重写loadView里面没有创建控制器的view,就不能使 用self.view,会造成死循环。 
    

    • 控制器View的决定权:重写LoadView>storyboard>nibName>xib

  2. 控制器的view是延迟加载的。
    1. 只有在窗口显示的时候,才会调用loadView 方法。
    2. 用到控制器view的时候才会加载控制器的view,设置控制器view的背景颜色
    3. 通过设置控制器view的颜色,引出两个疑问。
      a. 控制器的view由loadView决定, loadView显示什么颜色,就是什么颜色。
      b. loadView只是创建控制器View,并不能决定控制器的view的颜色。
      c. 理解loadView的调用时刻:第一次调用self.view,底层会调用LoadView 方法,创建控制器的view,这时候的view是LoadView的颜色,但是 vc.view.backgroundColor,是拿到控制器的view又设置一次颜色,把 LoadView设置的颜色给覆盖了。
      d. 在viewDidLoad也设置颜色,还是vc.view.backgroundColor决定,因为vc.view就是获取控制器的view,只有控制器的view加载完成之后,才能获取 到,因此先调用viewDidLoad。
  3. 如何快速生成一个xib描述控制器的view,之前还要在xib拖视图,设置xib描述哪个控制器,很麻烦。
    1. 定义新的控制器的时候,勾选xib,会自动搞一个xib描述控制器的view.
      会自动生成一个和控制器同名的xib,并且里面设置好了。

ViewController的加载方式

1、通过代码的方式加载viewController

UIViewController *controller = [[UIViewController alloc] init];
controller.view.backgroundColor = [UIColor redColor];
self.window.rootViewController = controller;

2、通过stroyboard来加载viewController
这里写图片描述

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

//加载箭头指向的viewController
JHViewController *controller = [storyboard instantiateInitialViewController];
self.window.rootViewController = controller;
3、通过xib加载viewController
这里写图片描述

    CZViewController *controller = [[CZViewController alloc] initWithNibName:@"CZOneView" bundle:nil];
self.window.rootViewController = controller;

4.流程图
这里写图片描述
• loadView什么时候会调用->当 self.view == nil 的时候会调用,要创建 self.view
• 优先顺序
1> 用系统的loadView方法创建控制器的视图
2> 如果指定加载某个storyboard文件做控制器的视图,就会加载storyboard里面的描述去创建view
3> 如果指定读取某个xib文件做控制器的视图,就根据指 定的xib文件去加载创建
4> 如果有xib文件名和控制器的类名前缀(也就是去掉controller)的名字一样的 xib文件 就会用这个xib文件来创建控件器的视图 例:控件器的名为 MJViewController xib文件名为 MJView.xib 如果xib文件名后有一个字不一样就不会去根据它去创建如:MJView8.xib
5> 找和控制器同名的xib文件去创建
6> 如果以上都没有就创建一个空的控件器的视图;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值