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

一、关于这个手动创建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.mzph.cn/news/153746.shtml

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

相关文章

2023年11月中旬大模型新动向集锦

2023年11月中旬大模型新动向集锦 2023.11.21版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、谷歌生成式 AI 搜索生成体验(SGE)扩展到 120 多个新国家/地区 近日,Google 扩展了其由生成式人工智能驱…

mybatis使用foreach标签实现union集合操作

最近遇到一个场景就是Java开发中,需要循环多个表名,然后用同样的查询操作分别查表,最终得到N个表中查询的结果集合。在查询内容不一致时Java中跨表查询常用的是遍历表名集合循环查库,比较耗费资源,效率较低。在查询内容…

22款奔驰GLE450升级原厂360全景影像 超广角的视野

360全景影像影像系统提升行车时的便利,不管是新手或是老司机都将是一个不错的配置,无论是在倒车,挪车以及拐弯转角的时候都能及时关注车辆所处的环境状况,避免盲区事故发生,提升行车出入安全性。 360全景影像包含&…

Vite3构建Vue3项目

文章目录 Vite3构建Vue3项目Vite1、创建vite3项目2、安装依赖3、运行vite项目4、安装路由src目录下,添加加router/index.jsmain.js导入router 5、axiosaxios配置 引入element-plus1、安装2、引入1、完整引入2、按需导入1、自动导入 Vite3构建Vue3项目 Vite 什么是…

重要功能丨支持1688API 接口对接一键跨境铺货及采购,解决跨境卖家货源烦恼!

在跨境电商运营中,不少卖家都会优先选择1688平台产品作为跨境店铺货源。 必不可少的1688商品详情接口 阿里巴巴中国站获得1688商品详情 API 返回值说明 item_get-获得1688商品详情 1688.item_get 公共参数 请求地址: 申请调用KEY测试 名称类型必须描述keyStrin…

企企通亮相广东智能装备产业发展大会:以数字化采购促进智能装备产业集群高质量发展

制造业是立国之本,是国民经济的主要支柱、是推动工业技术创新的重要来源。 广东作为我国制造业大省,装备制造业规模增长快速,技术水平居于全国前列。为全面贯彻学习党的二十大精神,进一步推动机械装备可靠性设计,促进新…

8.1 Windows驱动开发:内核文件读写系列函数

在应用层下的文件操作只需要调用微软应用层下的API函数及C库标准函数即可,而如果在内核中读写文件则应用层的API显然是无法被使用的,内核层需要使用内核专有API,某些应用层下的API只需要增加Zw开头即可在内核中使用,例如本章要讲解…

本地/笔记本/纯 cpu 部署、使用类 gpt 大模型

文章目录 1. 安装 web UI1.1. 下载代码库1.2. 创建 conda 环境1.3. 安装 pytorch1.4. 安装 pip 库 2. 下载大模型3. 使用 web UI3.1. 运行 UI 界面3.2. 加载模型3.3. 进行对话 使用 web UI 大模型文件,即可在笔记本上部署、使用类 gpt 大模型。 1. 安装 web UI 1…

DCDC同步降压控制器SCT82A30\SCT82630

SCT82A30是一款100V电压模式控制同步降压控制器,具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比,实现从48V输入到低压轨的直接降压转换,降低了系统复杂性和解决方案成本。如果需要,在低至6V的输入电压下降期间&am…

基于可变形卷积和注意力机制的带钢表面缺陷快速检测网络DCAM-Net(论文阅读笔记)

原论文链接->DCAM-Net: A Rapid Detection Network for Strip Steel Surface Defects Based on Deformable Convolution and Attention Mechanism | IEEE Journals & Magazine | IEEE Xplore DCAM-Net: A Rapid Detection Network for Strip Steel Surface Defects Base…

uniapp - 开关按钮

目录 1.运行代码如下&#xff1a; 2.运行效果 3.switch属性 1.运行代码如下&#xff1a; <template><view class"switchBox"><switch change"switchChange" color"#F21177" :checked"form.checked" /></view&…

科大讯飞 vue.js 语音听写流式实现 全网首发

组件下载 还是最近的需求&#xff0c;页面表单输入元素过多&#xff0c;需要实现语音识别来由用户通过朗读的方式向表单中填写数据&#xff0c;尽量快的、高效的完成表单数据采集及输入。 国内科大讯飞在语音识别方面的建树还是有目共睹&#xff0c;于是还是选择了科大讯飞的平…

【AI实用技巧】GPT写sql统计语句

编写sql的统计语句是一项复杂的任务&#xff0c;特别是涉及多表的情况下。但有了GPT的帮助&#xff0c;一切变得轻松愉快。 AI7号 - 最强人工智能&#xff08;GPT&#xff09;中文版https://ai7.pro/s/9v2um 举例说明 有表结构如下&#xff1a; users(user_id, name) bills(…

改进YOLOv8:结合ConvNeXt V2骨干网络!使用MAE共同设计和扩展ConvNet

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

函数调用分析

目录 函数相关的汇编指令 JMP指令 call指令 ret指令 VS2019正向分析main函数 总结调用函数堆栈变化规律 x64dbg分析调用函数 IDA分析调用函数 函数相关的汇编指令 JMP指令 JMP 指令表示的是需要跳转到哪个内存地址&#xff0c;相当于是间接修改了 EIP 。 call指令 ca…

Windows环境VSCode配置OpenCV-项目配置(二)

修改c_cpp_properties.json {"configurations": [{"name": "windows-gcc-x64","includePath": ["${workspaceFolder}/**","D:/mingw64/mingw64/include","D:/openCV_win/build/install/include","…

系列十二、线程池

一、线程池 1.1、为什么需要线程池 10年前单核CPU电脑&#xff0c;假的多线程&#xff0c;像马戏团小丑玩多个球&#xff0c;CPU需要来回切换。现在是多核电脑&#xff0c;多个线程各自跑在独立的CPU上&#xff0c;不用切换效率高。 1.2、优势 线程池做的主要工作是控制运行的…

天猫超市电商营销系统:无代码开发实现API连接集成

无代码开发实现天猫超市与电商系统的高效连接 天猫超市&#xff0c;作为天猫推出的网络零售超市&#xff0c;为广大网购消费者提供了一站式的购物服务。而通过无代码开发的方式&#xff0c;天猫超市能够实现与各种电商系统的连接和集成&#xff0c;这种方式无需进行繁琐的API开…

ESP32 http 请求

目录 参考教程1.使用的http连接2.使用Vscode-IDF创建http_request例程3.修改http_request_example_main.c函数4.已经获取到响应的数据 参考教程 ESP-IDF HTTP获取网络时间 1.使用的http连接 http://api.m.taobao.com/rest/api3.do?apimtop.common.getTimestamp请求可以得到…