IOS开发 - UIViewController 界面控制基类解析

news/2025/10/14 22:13:49/文章来源:https://www.cnblogs.com/ajunjava/p/19142138

UIViewController 是什么

  • UIViewController 就是 iPhone 每个界面的“总管”,它负责这个界面怎么显示怎么动点按钮后干啥

  • 类比解析:假设开一个演唱会

    演唱会元素 在 iOS 中对应
    舞台(观众能看到的地方) UIView(视图)
    导演(控制灯光、音效、流程) UIViewController(控制器)
    灯光、布景、屏幕 各种 UI 控件(按钮、文字、图片)
    • 观众看到的是 View(舞台),一切背后安排的,是 ViewController(导演)

UIViewController 的含义

  • UIViewControlleriOS 里所有界面的基类,每一个页面(比如“设置”“首页”“播放界面”)都是它的一个子类

    @interface ViewController : UIViewController
    @end
    //这个 ViewController 是一个页面,它继承了系统提供的所有页面功能。
    

UIViewController 的作用

功能 说明
创建和管理界面 界面显示什么内容(文字、按钮、图片)
处理用户操作 点击、滑动、输入
页面跳转 进入下一个页面、返回上一个页面
生命周期管理 页面加载、显示、消失时执行特定逻辑
管理内存 页面销毁时清理资源

UIViewController 的结构

UIViewController└── self.view├── UILabel(文字)├── UIButton(按钮)├── UIImageView(图片)└── 其他子视图
// 你操作的所有控件(按钮、文本框、图片),其实都放在这个控制器的 view 里。

常见例子

@implementation ViewController// 视图控制器的生命周期方法:当视图被加载到内存中时调用一次
- (void)viewDidLoad {[super viewDidLoad]; // 一定要先调用父类的实现:让 UIViewController 做它自己的初始化工作NSLog(@"页面加载完成"); // 在控制台打印一条信息,调试时用来确认 viewDidLoad 被触发// 设置根视图的背景色为白色(默认是透黑或系统色)self.view.backgroundColor = [UIColor whiteColor];// 创建一个系统风格的按钮(UIButtonTypeSystem)UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];// 设置按钮在父视图中的位置和大小:x=100 y=100 宽120 高40btn.frame = CGRectMake(100, 100, 120, 40);// 设置按钮在普通状态下显示的文字[btn setTitle:@"点我跳转" forState:UIControlStateNormal];// 给按钮添加事件:当用户触摸并抬起(TouchUpInside)时,调用当前对象的 goNext 方法[btn addTarget:self action:@selector(goNext) forControlEvents:UIControlEventTouchUpInside];// 把按钮加入到当前控制器的根视图上,这样才能显示[self.view addSubview:btn];
}// 自定义方法:响应按钮事件,负责“切换场景 / 打开新界面”
- (void)goNext {// 创建一个新的 UIViewController 实例,作为要展示的下一个页面// 这里的 UIViewController 类似创建一个新的画布UIViewController *nextVC = [[UIViewController alloc] init];// 设置新页面的背景颜色为橙色,便于区分当前页面和新页面nextVC.view.backgroundColor = [UIColor orangeColor];// 以模态方式弹出 nextVC(默认表现依 iOS 版本不同可能是卡片或全屏)// animated:YES 表示带动画,completion:nil 表示动画完成后不额外执行代码[self presentViewController:nextVC animated:YES completion:nil];
}@end

与其他控制器类的关系

控制器 作用
UIViewController 最基础的控制器(所有页面的爸爸)
UINavigationController 管理页面跳转(push/pop)
UITabBarController 底部切换(主页/设置/我的)
UITableViewController 列表页面

总结

比喻 真实意义
🎬 导演 控制整个页面的逻辑
🎨 舞台 UIView(用户能看到的部分)
🎭 演员 按钮、文字、图片等控件
🔄 换场 页面切换、跳转
  • UIViewController 可以说是一个页面的大脑,没有它,界面就只是死的画布。

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

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

相关文章

SpringBoot运维实用篇(YW-1.SpringBoot程序的打包与运行,YW-2.配置高级,YW-3.多环境开发,YW-4.日志) - a

SpringBoot运维实用篇 目录SpringBoot运维实用篇YW-1.SpringBoot程序的打包与运行程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题及解决方案SpringBoot项目快速启动(Linux版)YW-2.配置高级YW-2-1.临…

CSP-S模拟31

CSP-S模拟31 A. 远征 (expedition) 简单题,直接大力 \(O(nV)\) 预处理 对于每个数每个位置 记录这个数下一个会被更改的位置。 查询直接跳即可,复杂度是 \(O(\log V)\) Code: #include<bits/stdc++.h>using n…

matlab 2025b + adalm-pluto 链接测试

matlab 2025b + adalm-pluto 链接测试1、matlab 菜单栏 → 获取硬件支持包→搜索 pluto , 点进去进行安装,并安装驱动, 我这里已安装 2、点击 上面 截图 中的 已安装 对应 的图标, 进入界面, 点击 管理 3、 …

Fortran 实现英文数字验证码识别系统

一、引言 验证码识别是人工智能与图像处理技术的重要应用场景之一。尽管现代验证码识别大多使用 Python、C++ 或 JavaScript 等语言实现,但为了探索底层计算与矩阵操作的效率,我们可以尝试用 Fortran 来实现一个基础…

10.14 NOIP 模拟赛 T1. HappyLovelyEveryday!

思路 不难发现等价于划分序列, 对序列内部做异或和, 求本质不同的最终序列的数量 考虑去重, 子序列计数去重用的是钦定尽量往前匹配 本题中, 对于任意一种最终序列, 我们可以限制每个划分块都必须是最小的, 也就是攒够…

P3111 [USACO14DEC] Cow Jog S 题解 - 符星珞

P3111 [USACO14DEC] Cow Jog S 题解洛谷的翻译不太好。补一下。 题目描述 奶牛们又出来锻炼蹄子啦!现在有 \(N\) 头奶牛在一条无限长的单车道跑道上慢跑(\(1 \leq N \leq 10^5\))。每头奶牛开始时都处于跑道上的不同…

Patch_SCN for Linux 功能完善---惜分飞

Patch_SCN for Linux 功能完善---惜分飞联系:手机/微信(+86 17813235971) QQ(107644445) 标题:Patch_SCN for Linux 功能完善 作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任…

CSP-J 2025 入门级模拟赛 Day6 复盘 B. 罐の水表

题意 小罐喜欢查水表,这一天他来到了一条有 N 个排成一列的水表的街道查水表。 经过鉴定,他发现有一些水表损坏了,1 表示损坏,0 表示完好。 小罐每次可以使一段长度为 L 的连续的水表全部完好如初( 覆盖的范围可以…

20251014 杂题

atcoder一类常见的折半问题. 枚举子集和枚举超集可以均摊,改为枚举一半子集,一半超级. 具体地:其中枚举子集我写的太劣了还T了P7252 [JSOI2011] 棒棒糖 区间查询绝对众数. 首先直接随机化就可以过,每次随机一个数钦定他…

SQL在智能自动化业务场景中的应用 - Irving11

一、连续登录问题关键逻辑: 连续日期(如 2023-01-01、2023-01-02、2023-01-03)减去各自的排序序号(1、2、3)后,结果都是 2023-12-31,因此会被分到同一组 通过分组统计天数,即可筛选出连续登录的用户2、总结:整…

实用指南:【53道前端必考】JavaScript 基础面试题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:Android Framework默认给应用添加dangerous级别权限

完整教程:Android Framework默认给应用添加dangerous级别权限pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

拼接字符串要求字典序最小

好唐啊,这种题我目前已经知道三道一样的了,无聊记录一下。 传递性可以通过 题解:P1012 [NOIP 1998 提高组] 拼数 中的转小数来证明,而最优性就是,我们本来就考虑的相邻两个 \(i,j\) 谁在前面更优,显然把,当然我…

20251013 模拟赛 总结

考虑每个铁路拆除造成的影响. 如果在开始或者结束,如果旁边的铁轨被拆除,连续段数-1,否则无影响. 如果不在开始结尾. 如果两边都被拆了,连续段数-1 如果一边被拆了,不变. 两边都没被拆,答案+1. 当然直接线段树做也是没…

高级语言作业第一次随笔

这个作业属于 https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求在 https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13558 学号:102500415 姓名:林帅前 一.安装dev.c 1.过程 (1)先打开安装包并解压(2…

.net Core资料

.net Core资料ASP.NET Core入门到精通 .NET项目中NLog的配置与使用 .NET Core 学习资料精选 教程:ASP.NET Core 入门 C#/.NET/.NET Core推荐学习书籍 如何学习CORE .net core中使用Autofac Autofac在.…

C#实现开机自启动应用多种方式

在 Windows 操作系统中,我们可以通过多种方式来实现程序的开机自启,下面将为大家详细介绍几种常用的方法及其对应的代码示例,同时也会提及一些可能遇到的问题及待解决事项。注册表配置开机自启Startup文件夹任务计划…

吾の歌单

吾の歌单英文: 《String Theocracy》神权政治之绳 《And Then Is Heard No More》句末无声 《From a Place of Love》来源于爱 《Iron Lotus》铁血莲华 《Children of the City》 都市之子 《Gone Angels》别离的天使…

什么是反应式编程 - 详解

什么是反应式编程 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…