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

简介:

说明:控制器有三种创建方式,下面一一进行说明。

一、第一种创建方式(使用代码直接创建)

1.创建一个空的IOS项目。

2.为项目添加一个控制器类。

3.直接在代理方法中创建一个控制器。

复制代码
 1 #import "YYAppDelegate.h"  2 #import "YYViewController.h"  3  4 @implementation YYAppDelegate
 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 7 {
 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 9 // Override point for customization after application launch. 10 self.window.backgroundColor = [UIColor whiteColor];
11 12 //创建控制器 13 YYViewController *controller=[[YYViewController alloc]init];
14 //设置控制器View的背景颜色 15 controller.view.backgroundColor=[UIColor brownColor];
16 //设置该控制器为Window的根控制器 17 self.window.rootViewController=controller;
18  [self.window makeKeyAndVisible];
19 return YES;
20 }
复制代码

4.控制器的view添加到Window上显示出来。

二、第二种创建方式(通过storyboard创建)

1.添加一个storyboard文件,命名为test,在界面上拖一个view controller控制器。

2.设置这个控制器和程序中的YYviewController类进行关联,设置控制器view的颜色以便区分。

3.注意这种错误写法。

复制代码
 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 4 // Override point for customization after application launch.  5 self.window.backgroundColor = [UIColor whiteColor];
 6  7 YYViewController *controller=[[YYViewController alloc]init];
 8 self.window.rootViewController=controller;
 9 10  [self.window makeKeyAndVisible];
11 return YES;
12 }
复制代码

注意:仅仅这样是不行的,因为程序中并没有加载storyboard,所以没有能够创建出我们想要的控制器。怎么办?明确的告诉要加载的storyboard。

4.创建代码:

复制代码
 1 #import "YYAppDelegate.h"  2 #import "YYViewController.h"  3  4 @implementation YYAppDelegate
 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 7 {
 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 9 self.window.backgroundColor = [UIColor whiteColor];
10 11 // YYViewController *controller=[[YYViewController alloc]init];
12 13 //1.加载storyboard,(注意:这里仅仅是加载名称为test的storyboard,并不会创建storyboard中的控制器和控件) 14 UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
15 16 //2.下面这个方法代表着创建storyboard中箭头指向的控制器(初始控制器) 17 YYViewController *controller=[storyboard instantiateInitialViewController];
18 19 //参考
20 // UINib *nib=[UINib nibWithNibName:@"test" bundle:nil];
21 // [nib instantiateWithOwner:nil options:nil];
22 23 //3.设置控制器为Window的根控制器 24 self.window.rootViewController=controller;
25 26  [self.window makeKeyAndVisible];
27 return YES;
28 }
复制代码

步骤:

(1)加载storyboard

(2)创建控制器

(3)把控制器设置为Window的根控制器

5.拓展

新的需求:如果在一个storyboard中又多个控制器,如何指定创建哪个特定的控制器呢?

这里有两种方法可以考虑:

(1)更改初始控制器,即把箭头拖拽到想要创建的控制器前面,在代码中进行创建。

实现代码:

复制代码
 1 #import "YYAppDelegate.h"  2 #import "YYViewController.h"  3  4 @implementation YYAppDelegate
 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 7 {
 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 9 self.window.backgroundColor = [UIColor whiteColor];
10 11 // YYViewController *controller=[[YYViewController alloc]init];
12 13 //1.加载storyboard 14 UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
15 16 //2.创建指定的控制器 17 UIViewController *controller=[storyboard instantiateInitialViewController];
18 19 //3.设置控制器为Window的根控制器 20 self.window.rootViewController=controller;
21 22  [self.window makeKeyAndVisible];
23 return YES;
24 }
复制代码

提示:注意创建的指定控制器的类型。

(2)通过设置唯一的标识符来创建指定的控制器

  实现代码:

复制代码
 1 #import "YYAppDelegate.h"  2 #import "YYViewController.h"  3  4 @implementation YYAppDelegate
 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 7 {
 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 9 self.window.backgroundColor = [UIColor whiteColor];
10 11 //1.加载storyboard 12 UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
13 14 //2.创建指定的控制器 15 16 UIViewController *controller=[storyboard instantiateViewControllerWithIdentifier:@"one"];
17 //3.设置控制器为Window的根控制器 18 self.window.rootViewController=controller;
19 20  [self.window makeKeyAndVisible];
21 return YES;
22 }
复制代码

三、第三种创建方式(使用xib)

1.新建一个xib文件,命名为two.xib。

2.创建过程和注意点

(1)创建代码:

复制代码
 1 #import "YYAppDelegate.h"  2 #import "YYViewController.h"  3  4 @implementation YYAppDelegate
 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 7 {
 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 9 self.window.backgroundColor = [UIColor whiteColor];
10 11 //1.通过xib创建控制器 12 YYViewController *controller=[[YYViewController alloc]initWithNibName:@"two" bundle:nil];
13 //2.设置这个控制器为Window的根控制器 14 self.window.rootViewController=controller;
15 16  [self.window makeKeyAndVisible];
17 return YES;
18 }
复制代码

(2)两个错误注意点

1)不能加载(was unable to load a nib named "two"

产生原因:在xib文件中没有进行任何操作。

解决方法:往xib中拖一个view

2)加载了xib,但是没有设置输出口(loaded the "two" nib but the view outlet was not set.'

产生原因:没有把xib的view设置为YYviewController的view

解决方法:设置File‘s Owner,可以理解为设置这个文件归谁所有,对File‘s Owner和view进行连线。连线是因为一个xib中可能会有多个view,在storyboard中默认就已经进行了连线。

四、模仿有storyboard的项目控制器的创建

1.创建一个项目

2.在配置文件中,把主storyboard的名称删掉(找不到storyboard)。

3.代码(storyboard做的事情就是下面的代码所做的事情)

复制代码
 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3  4 // Override point for customization after application launch.
 5 // 1.创建winodw  6 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
 7 // 2.创建控制器  8 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
 9 NJViewController * vc = [storyboard instantiateInitialViewController];
10 // 3.设置window的根控制器 11 self.window.rootViewController = vc;
12 // 4.显示window 13  [self.window makeKeyAndVisible];
14 15 return YES;
16 }
复制代码
目录
相关文章
|
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 连接器,三大模式无缝切换,效率翻倍!
|
开发框架 缓存 自然语言处理
HarmonyOS ArkTS声明式UI开发实战教程
本文深入探讨了ArkTS作为HarmonyOS生态中新一代声明式UI开发框架的优势与应用。首先对比了声明式与命令式开发的区别,展示了ArkTS如何通过直观高效的代码提升可维护性。接着分析了其核心三要素:数据驱动、组件化和状态管理,并通过具体案例解析布局体系、交互组件开发技巧及复杂状态管理方案。最后,通过构建完整TODO应用实战,结合调试优化指南,帮助开发者掌握声明式UI设计精髓,感受ArkTS的独特魅力。文章鼓励读者通过“破坏性实验”建立声明式编程思维,共同推动HarmonyOS生态发展。
669 3