iOS开发UI篇—控制器的View的创建

简介:

一、6种创建控制器View的方式

复制代码
 1 #import "NJAppDelegate.h"  2 #import "NJViewController.h"  3 /*  4  1.没有同名xib情况下
 5  2.通过 storyboard 创建
 6  3.有指定xib情况下创建
 7  4.有同名xib情况
 8  5.有同名去掉controll的情况
 9  6.loadveiw
10 */ 11 @implementation NJAppDelegate
12 13 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
14 {
15 // 创建UIWindow 16 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
17 self.window.backgroundColor = [UIColor whiteColor];
18 19 /* 20  // 1.第一种方式:没有xib和storyboard
21  // (如果没有xib和storyboard, 会自动创建一个空白的view做为控制器的veiw)
22  NJViewController *vc = [[NJViewController alloc] init];
23 */ 24 25 /* 26  //2.通过 storyboard 创建
27  // 如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw
28 29  // 如果重写了控制器的loadview方法, 就不会创建storyboard中描述的view作为控制器的view, 而是创建一个空白的veiw做为控制器的veiw
30  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
31  NJViewController *vc = [storyboard instantiateInitialViewController];
32 */ 33 34 /* 35  // 3.有指定xib情况下创建
36  // 如果通过xib, 会创建xib中描述的veiw做为控制器的veiw
37  NJViewController *vc = [[NJViewController alloc] initWithNibName:@"One" bundle:nil];
38 */ 39 40 /* 41  // 4.有同名xib情况
42  // 如果有同名的xib, 会自动找到同名xib中描述的view做为控制器的veiw
43  NJViewController *vc = [[NJViewController alloc] init];
44 */ 45 46 /* 47  // 5.有同名去掉Controller的 xib情况
48  // 如果有有同名去掉Controller的xib, 会自动找到该xib的view做为控制器的view
49  NJViewController *vc = [[NJViewController alloc] init];
50 */ 51 52 // 6.重写控制器的loadveiw方法
53 // 如果重写了控制器的loadview方法, 就不会去加载创建同名去掉controller的xib和同名的xib, 而是创建一个空白的veiw做为控制器的veiw 54 NJViewController *vc = [[NJViewController alloc] init];
55 56 // 设置控制器为window的根控制器 57 self.window.rootViewController = vc;
58 // 显示window 59  [self.window makeKeyAndVisible];
60 61 return YES;
62 }
复制代码

六种方式:

1.没有同名xib情况下
2.通过 storyboard 创建
3.有指定xib情况下创建
4.有同名xib情况
5.有同名去掉controll的情况
6.loadveiw

二、创建控制器View的优先级

苹果官方文档示意图:

三、控制器View的延迟加载

说明:

控制器的view是延迟加载的:用到时再加载

可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载

控制器的view加载完毕就会调用viewDidLoad方法

复制代码
 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3 // 1.创建UIWindow  4 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 5 self.window.backgroundColor = [UIColor whiteColor];
 6  7  8 // 2.创建控制器  9 NJViewController *vc = [[NJViewController alloc] init];
10 11 // 其实是两步操作, 首先调用loadview方法, 创建控制器的veiw,然后再设置控制器的view的颜色为紫色, 也就是说后一次的颜色覆盖掉了前一次的颜色 12 vc.view.backgroundColor = [UIColor purpleColor];
13 14 // 3.设置控制器为window的根控制器 15 self.window.rootViewController = vc;
16 17 // 4.显示window(在这一行才用到了控制器的veiw) 18  [self.window makeKeyAndVisible];
19 20 return YES;
21 }
复制代码

主控制器文件中:

复制代码
 1 #import "NJViewController.h"  2  3 @interface NJViewController ()
 4  5 @end  6  7 @implementation NJViewController
 8  9 // 当控制器需要显示控制器的view的时候就会调用loadView
10 // 可以在loadView方法中创建view给控制器
11 // 该方法一般用于自定义控制器的view 12 - (void)loadView
13 {
14 // 什么时候调用loadveiw就代表什么时候加载控制器的veiw 15 NSLog(@"loadView");
16 17 self.view = [[UIView alloc] init];
18 self.view.backgroundColor = [UIColor greenColor];
19 }
20 21 - (void)viewDidLoad
22 {
23  [super viewDidLoad];
24 NSLog(@"viewDidLoad");
25 }
26 @end
复制代码
目录
相关文章
|
11月前
|
iOS开发
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
408 9
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
|
11月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
379 15
|
11月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
400 11
|
7月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
540 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
10月前
|
JavaScript 前端开发 UED
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发四
本文介绍了Web组件开发与性能优化的相关内容。在Web组件开发部分,涵盖创建组件、设置样式与属性、添加事件和方法以及场景示例,如动态播放视频。性能提升方面,推荐使用数据懒加载、条件渲染替代显隐控制、Column/Row替代Flex、设置List组件宽高及调整cachedCount减少滑动白块等方法,以优化应用性能与用户体验。
351 56
|
10月前
|
编解码 UED 开发者
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发之常见布局
本文主要介绍了自适应布局与响应式布局的相关内容。自适应布局部分涵盖线性布局、层叠布局、弹性布局和网格布局,详细说明了各布局的特性及使用方法,例如线性布局中的排列、拉伸与缩放,弹性布局的方向、换行与对齐方式等。响应式布局则重点讲解了栅格系统和媒体查询,阐述如何通过栅格组件和媒体查询条件实现不同设备上的适配效果。这些技术帮助开发者灵活应对多尺寸屏幕的设计需求,提升用户体验。
515 55
|
11月前
|
存储 开发框架 API
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发二
本文详细介绍了基于声明式UI开发的健康饮食应用的设计与实现过程。内容涵盖从基础环境搭建到复杂功能实现的全流程,包括创建简单视图、构建布局(如Stack、Flex)、数据模型设计、列表与网格布局构建,以及页面跳转和数据传递等核心功能。 本文通过实际案例深入浅出地解析了声明式UI开发的关键技术和最佳实践,为开发者提供了宝贵的参考。
419 14
|
10月前
|
JavaScript 前端开发 开发者
09.HarmonyOS Next数据驱动UI开发:ForEach与动态渲染完全指南(上)
在现代前端开发中,数据驱动UI已成为主流开发范式。HarmonyOS Next的ArkTS语言和声明式UI框架完美支持这一理念,使开发者能够以更高效、更直观的方式构建复杂应用。
287 1
|
人工智能 物联网 编译器
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
348 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
2858 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!