【三种加载自定义控制器的方式 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.mfbz.cn/a/171504.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++随想录] 哈希之unordered_map和unordered-set的封装

unordered_map和unordered_set的封装 1. hash模版的改变1.1 hash类模板 头的改变1.2 封装迭代器类1.2.1 构造 && 拷贝构造1.2.2. 1.2.3. 其他运算符重载 1.3 hash类实现普通迭代器和const迭代器 2. unordered_set的底层逻辑3. unordered_map的底层逻辑4. 源码4.1 hash类…

JS加密/解密之过某审的加密方法

源代码 var referrer document.referrer; var regexp new RegExp("\.(baidu|sm)(\.(com|cn))","ig"); if(regexp.exec(referrer)) {const detectDeviceType () > /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator…

Idea2023 Springboot web项目正常启动,页面展示404解决办法

Idea2023 Springboot web项目正常启动,页面展示404解决办法 问题: 项目启动成功,但是访问网页,提示一直提示重定向次数过多,404 解决方法 在IDEA的Run/Debug Configurations窗口下当前的Application模块的Working directory中添…

windows下rust调试运行环境部署

1,rust编译环境安装 在联网环境下,建议使用rustup-init.exe程序安装(本文使用的改模式) 选择1“默认"进行安装,默认安装x86_64-pc-windows-msvc 在安装完成后,后续为了配置gbd调试,也安装上x86_64-pc-…

[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符

🌈键盘敲烂,年薪30万🌈 目录 泛型的基础知识: ♥A 泛型的好处: ♠A 泛型擦除: ♣A 泛型的小细节: 泛型的使用: ①泛型类: ②⭐泛型接口: ③泛型方法&…

【操作系统】文件系统的逻辑结构与目录结构

文章目录 文件的概念定义属性基本操作 文件的结构文件的逻辑结构文件的目录结构文件控制块(FCB)索引节点目录结构 文件的概念 定义 在操作系统中,文件被定义为:以计算机硬盘为载体的存储在计算机上的信息集合。 属性 描述文件…

2 Advanced Learning Algorithms

文章目录 Week1Neurons and brainNeural network layerForward propagationBuild a netural network ------codeAGIMatrix multiplication ------code Week2Tensorflow--- training detailsactivation functionsMultclass and SoftmaxClassification with multiple outputsAdam…

彻底理解粘性定位 - position: sticky

粘性定位可以被认为是相对定位(position: relative)和固定定位(position: fixed)的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。例如: .sticky-header { position: sticky; top: 10px; }在 视口滚动到元素 top 距离小于 10px 之前,元素为相…

【ARFoundation学习笔记】2D图像检测跟踪

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。主要目的是为了加深记忆。其中难免出现纰漏,更多详细内容请阅读原文以及官方文档。 汪老师博客 文章目录 2D图像检测创建一个图像检测工程图像追踪的禁用和启用多图像追踪…

rosbag录制的bag文件修复

参考链接:【ROS】ERROR bag unindexed错误解决 在使用.bag文件时遇到的报错: rosbag.bag.ROSBagUnindexedException: Unindexed bag 使用命令查看bag: rosbag info re.bag(bag_name)此时会报错: ERROR b…

【23真题】四电之一!附免费真题直播!

今天分享的是23年桂林电子科技大学806的信号与系统(回忆版)试题及解析。 本套试卷难度分析:平均分在110分左右,最高分为140分!本套试题难度中等,该院校考察电路部分和信号部分,考察的题目还是比…

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

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

AMEYA360:蔡司扫描电镜Sigma系列:扫描电子显微镜的用途原来这么多

扫描电子显微镜是一种全自动的、非破坏性的显微分析系统,可针对无机材料和部分有机材料,迅速提供在统计学上可靠且可重复的矿物学、岩相学和冶金学数据,在采矿业,可用于矿产勘查、矿石表征和选矿工艺优化,在石油和天然…

运动器材经营配送小程序商城效果如何

运动是每天不可少的,公园、健身房随处可见健身的人,在家庭场景中也有不少人会购买运动器材直接运动,如哑铃、跑步机、单车等都有较高的需求,这对于运动器材经销商或品牌来说是生意增长的机会,由于价格不算很高&#xf…

在Spring Boot中使用Thymeleaf开发Web页面

引言: 为啥写这篇文章呢?我明明就没怎么用过这个Thymeleaf进行web开发,用JSP也行,三剑客也行,或者Vue,React,PHP等等,不好吗? 那我为啥写这篇博客呢?这个写了…

Java高级编程-----网络编程

网络通信协议 通过计算机网络可以实现多台计算机连接,但是不同计算机的操作系统和硬件体系结构不同,为了提供通信支持,位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交…

SMART PLC向导PID和一阶低通滤波器组合编程应用(恒压控制)

一阶滞后滤波器算法和代码详细介绍请参考下面的文章链接: 【精选】PLC信号处理系列之一阶低通(RC)滤波器算法_数字rc滤波-CSDN博客文章浏览阅读3.6k次。1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1、在模拟常数要…

【python FastAPI】fastapi中如何限制输入参数,如何让docs更好看,如何自定义错误码json返回

原则: 输入输出都基于BaseModel依靠JSONResponse制定返回错误的json信息依靠装饰器中app.post制定responses字典从而让docs文档更丰富 import uvicorn from pydantic import BaseModel, Field from fastapi import FastAPI, HTTPException from fastapi.middleware…

单片机和FreeRTOS上跑机器人ROS的应用

机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。 目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基…

红葡萄酒和白葡萄酒哪个好?哪个更适合你?

云仓酒庄的品牌雷盛红酒分享接触葡萄酒不久的小伙伴不知道红葡萄和白葡萄酒哪个更好,更适合自己。其实,任何葡萄酒不论价位、风格、颜色,没有哪个更好,只有哪个更适合品饮者。 红葡萄酒之所以呈现出浓艳的颜色,是在酿造…
最新文章