【三种加载自定义控制器的方式 Objective-C语言】

news2024/7/30 19:49:07

一、关于这个手动创建Window呢,给大家说完了

通知

1.但是呢,要给大家补充一个东西,

有时候,有的框架,可能会用到什么东西呢,我写到下面:

通知

[UIApplication sharedApplication]

通知

什么东西,是不是应用程序对象,

然后呢,keyWindow

是不是拿到它的主窗口,

通知

然后呢,add什么东西,

[UIApplication sharedApplication].keyWindow addSubview:

通知

然后,加了一个它自定义的一个什么Window啊,customWindow

[[UIApplication sharedApplication].keyWindow addSubview:customWindow];

通知

然后呢,加进去以后,跑了半天,一点儿效果都没有,

通知

那提示大家,这种情况,你怎么解决呢,

就不要去用这种方式去加了啊,

就把它改一下,就行了,

[UIApplication sharedApplication]

通知

它是不是有一个什么属性:

通知

windows属性:

通知

然后呢,你给它拿个lastObject

通知

[[UIApplication sharedApplication].windows lastObject];

把它加到最后一个窗口,

然后呢,再去addSubview,

通知

[[[UIApplication sharedApplication].windows lastObject] addSubview:customWindow];

通知

把这个customWindow加进去,了解一下啊,这个,

通知

这个不需要大家掌握的,以后你在写的时候,如果别人的有些东西你显示不出来,有个印象就行了,

通知

知道怎么去解决,

好吧,那我们把这个就关了,

然后,接下来,给大家介绍一下下面一个东西,

通知

二、关于我们这个“三种加载控制器的方式“

1.那,现在我们学的都是哪些加载控制器,

1)现在大家了解的,是不是有一个storyboard,

2)还有一个,就是我们刚刚演示的,加载自定义控制器的时候,直接自定义了一个控制器,那种方式,相当于一个纯代码的方式,

通知

明白吧,因为我们没有storyboard,

也没有其他的东西,

2.那接下来呢,要给大家介绍的,三种创建控制器的方式,

1)第一种,就是纯代码,这个是不是跟我们刚才那个重复了,所以我们待会儿就直接快一点儿给它过去,就行了,

2)第二种,就是通过storyboard,创建控制器,那前面的时候,我们一直在用,知道它是通过storyboard加载,但是呢,我们并不知道怎么去加载,对吧,那你手动去实现一下,那就理解了,

3)第三种,就是通过xib创建控制器

通知

这个xib,我们是不是常见,

但是,没有用,对吧,

那接下来呢,我们就来给大家看一下这三种方式加载控制器,怎么去用

三、纯代码方式加载控制器

1.那首先呢,我先新建一个项目,

通知

新建一个项目,

通知

给它来个Name,

通知

- 3种加载自定义控制器的方式

通知

我们点Next,看一下这是第几份代码,

通知

是不是05了,

05 - 3种加载自定义控制器的方式,

通知

然后呢,

通知

首先,我们加载自定义控制器,三种加载控制器的方式,

那我呢,还是,一样的,我把系统的这些先给它删了,

通知

自己来实现,

选中这三个:ViewController.h、ViewController.m、Main.storyboard

通知

选中这三个,删掉,

Delete,

通知

Move to Trash,

通知

2.删完之后,还得干嘛,

通知

是不是把info.plist,Main,改掉,

但是呢,你在这个项目这个Target,里面这个General,

通知

看到没有,这个General显示蓝色的时候,意味着它选中了,

这里面有一个Main Interface,

通知

在这儿呢,Delete,然后,回来,

通知

看info.plist里面,

通知

是不是也就没有了,

而且那个Main storyboard file base name,都没了,

所以呢,这种方式也可以的啊,

然后呢,我们就,把三种加载自定义控制器的方式,都来一遍,

1)第一种:通过代码去创建控制器

2)第二种:通过storyboard去创建控制器

3)第三种:通过xib去创建控制器

通知

建三个文件夹,分门别类的去存放代码,

1)Code

2)Storyboard

3)xib

那,首先,加载自定义控制器,

通知

还是,我们先把前面坑给它先挖好,

1)第一步:先创建Window

通知

2)第二步:设置窗口的根控制器,然后呢,你得加载,对吧

通知

3)第三步:将窗口作为主窗口并可见

通知

好,我们再写一遍啊,后面就直接用了,

好,那我把这个1、3、先写了,

1)创建window

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

通知

self.window = 等于什么,是不是UIWindow alloc,直接让它等于屏幕的大小吧,[UIScreen mainScreen].bounds

3)将窗口作为主窗口并可见

[self.window makeKeyAndVisible];

通知

让这个self.window,makeKeyAndVisible,

2)设置窗口的根控制器

然后这步呢,就是加载控制器,设置它的根控制器,

哦,这里写错了,makeKeyAndVisible,对吧,

通知

makeKeyAndVisible,

然后,如果这么写,makeKeyWindow,是不是得加一个hidden = NO

[self.window makeKeyAndVisible];

通知

makeKeyAndVisible,

通知

然后呢,接下来,是不是把self.window.rootViewController,要指定一下,

通知

self.window.rootViewController = ?

通知

但是呢,现在我们没有控制器

//self.window.rootViewController = ?

通知

现在,我们没有控制器,对不对,那,怎么办呢,

1)首先,第一种方式,Code,已经演示过了,自定义控制器,现在还记得吗,是不是Command + N,

通知

现在,不用UIViewController,了啊,

我用UITableViewController,

给大家演示一下,

是不是这里选择Cocoa Touch Class,

通知

点Next,继承自UITableViewController

通知

继承自UITableViewController

通知

Name:HMTableViewController

通知

点Next,

通知

点Next,

通知

那,现在是不是这个代码就有了,

它的类,这是实际上就是一个控制器类,

然后呢,再回到AppDelegate.m,文件中,

通知

AppDelegate,

然后,在第10行代码呢,我给它加一个导入头文件,

#import “HMTableViewController.h“

通知

对吧,

通知

这种方式呢,就相当于通过纯代码创建控制器,

怎么创建,

HMTableViewController *tableVc = [[HMTableViewController alloc] init];

通知

然后呢,把它指定为我们窗口的根控制器,

self.window.rootViewController = tableVc;

通知

模拟器换成iPhone6S,

通知

command + R,

通知

那我们稍等一下啊,把它运行起来,现在它显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2013年12月2日 Go生态洞察:Go 1.2的测试覆盖率工具

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Find My自行车|苹果Find My技术与自行车结合,智能防丢,全球定位

自行车,这项古老而简单的交通工具,近年来在中国经历了一场令人瞩目的复兴。从城市的街头巷尾到乡村的田园小路,自行车成了一种新的生活方式,一个绿色出行的选择。中国的自行车保有量超过两亿辆,但是自行车丢失事件还是…

java算法学习索引之数组矩阵问题

一 将正方形矩阵顺时针转动90 给定一个NN的矩阵matrix,把这个矩阵调整成顺时针转动90后的形式。 顺时针转动90后为: 【要求】额外空间复杂度为O(1)。 public void rotate(int[][] matrix) {int tR 0; // 左上角行坐标int tC 0;…

2023年中国AI大模型行业发展趋势分析:未来发展将走向通用化和专用化并行[图]

AI大模型是AI预训练大模型的简称,通过在大规模数据上进行预训练,无需大量微调即可支持各种应用,具备多层神经网络结构、高级优化算法和强大计算资源,显著提升了AI的通用性和实用性。 AI大模型特点及意义 资料来源:共研…

Java引用类型(String)

目录 String解析 final的作用 String是否有长度限制 StringBuffer解析 StringBuilder解析 关键字、操作类相关 引用数据类型非常多大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型。String类型就是引用类型。 String解析 JVM运行时会分…

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现)

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现) 0、功能展示1、项目原理介绍2、数据集采集脚本3、将采集到的动作数据集利用mediapipe库检测手部关键点信息,转换成数据信息保存到本地4、训练一个效果一般的随机森林分类器5、使用Kreas训练一个效果好点的全连…

linux内核管理

linux内核会占用一定的空间,所以可以清理一下不需要使用的内核. 参考链接 Linux 内核及其关联文件通常存储在 /boot 目录下,内核模块通常存储在 /lib/modules 目录中。 首先查看已安装的列表: dpkg --list | grep linux-image其中&#xff…

Hfish安全蜜罐部署

一、Hfish蜜罐介绍 HFish蜜罐官网 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷…

python实战—核心基础4(超市购物小票随机抽奖程序) lv1

目录 一、核心代码解释 二、代码 三、运行截图 一、核心代码解释 1、random() 函数 描述 random() 方法返回随机生成的一个实数,它在[0,1)范围内。 语法 以下是 random() 方法的语法: import randomrandom.random() 注意:random()是不能直接访问…

肉豆蔻酰六肽-16——让皮肤更加光滑、更加柔软

肉豆蔻酰六肽-16 一种合成的脂肪酸连接肽,已知可提高皮肤的弹性,明显镇静,并帮助皮肤看起来和感觉更光滑、更柔软。它是由肉豆蔻酸与六肽 16 结合而成。肉豆蔻酰六肽 16 被归类为蛋白质刺激肽,这意味着它可以帮助皮肤表面&#x…

抽象轻松测试接口API

测试 1.测试环境 2.测试代码 3.代码结构 Maven项目核心依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependenc…

2023年中国涂料用环氧树脂需求量及行业市场规模前景分析[图]

环氧树脂具有力学性能高&#xff0c;内聚力强、分子结构致密&#xff0c;粘接性能优异&#xff0c;固化收缩率小&#xff08;产品尺寸稳定、内应力小、不易开裂&#xff09;&#xff0c;绝缘性、防腐性、稳定性、耐热性好&#xff08;可达200℃或更高&#xff09;等特点&#x…

解锁无限可能性:探索Amazon Lightsail的便捷云计算服务

解锁无限可能性&#xff1a;探索Amazon Lightsail的便捷云计算服务 在数字化时代&#xff0c;云计算成为推动创新和业务发展的关键驱动力。Amazon Lightsail 作为 Amazon Web Services&#xff08;亚马逊云科技&#xff09;家族中的一员&#xff0c;为小型企业和创业公司提供了…

共谋发展,共赢未来 | 江西航天红源农业科技总经理孟凡明一行莅临拓世科技集团考察参观

在时刻充满着变化与机遇的商业世界里&#xff0c;农业的颠覆与重构已成为产业新风口&#xff0c;在日新月异的当下&#xff0c;农业与乡村正被开辟成为推动产业结构升级的新战场。 2023年11月20日江西航天红源农业科技有限公司总经理孟凡明一行抵达拓世科技集团南昌总部进行考…

【鸿蒙应用ArkTS开发系列】- 灌水区,鸿蒙ArkTs开发有问题可以在该帖中反馈

大家好, 这是一篇水贴&#xff0c;给大家提供一个交流沟通鸿蒙开发遇到问题的地方。 新增新增这个文章呢&#xff0c;大家在开发使用ArkTS开发鸿蒙应用或者鸿蒙服务的时候&#xff0c;有遇到疑问或者问题&#xff0c;可以在本文章评论区提问&#xff0c;我看到了如果知道怎么…

基于SSM的学生档案管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

SpingBoot原理

目录 配置优先级Bean管理 (掌握)Bean的获取 ApplicationContext.getBeanBean的作用域 Scope("prototype") Lazy第三方Bean Bean Configuration SpringBoot底层原理 起步依赖与自动配置(无需手撸但面试高频知识点)自动配置引入第三方依赖常见方案方案1&#xff1a;Com…

python实战—数据分析与图表1(QQ群聊天数据分析) lv2

目录 一、核心代码解释 二、代码 三、运行截图 一、核心代码解释 1、readlines() 方法 描述 readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表&#xff0c;该列表可以由 Python 的 for... in ... 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。 语法 r…

HINSTANCE是什么?

HINSTANCE 就是 HMODULE&#xff1a;

SVN创建分支

一 从本地创建方式可指定版本号进行分支创建。 1、在本地目录右击 -----> 点击branch/tag(分支/标签) From: 源&#xff0c;可指定具体的版本号&#xff0c; To path: 可通过"..."选择分支路径 最后点击确定&#xff0c;交由服务器执行创建。 二 通过SVN客…