[Android开发学iOS系列] ViewController
iOS ViewController
写UIKit的代码, ViewController是离不开的.
本文试图讲讲它的基本知识, 不是很深入且有点杂乱, 供初级选手和跨技术栈同学参考.
What is a View Controller
iOS中的View Controller非常像Android中的Activity.
它负责用户界面的展示, 有一些生命周期的回调函数, 还和界面切换有关, 一个app中可以有一个或多个ViewController.
每一个ViewController都有一个single root view, 包含此ViewController的所有内容, 在页面上的所有View都会被加入到以这个root view为根的树形结构中去.
ViewController有一个view
属性, 代表最后返回的页面.
ViewController拥有所有的View, 管理和这些View相关的交互, 是离用户最近的第一层代码.
如何定义ViewController.
一般要继承UIViewController
.
如果你的页面主要是tableview或者collectionview也可以继承UITableViewController
或
UICollectionViewController
.
ViewController的类型
ViewController的类型有两种:
- Content view controller: 管理一块view的内容. (大多数的ViewController都是这一种.)
- Container view controller: 作为一个container, 管理其中的child view controllers.
把每个child view controller的root view显示在container的view范围内. 可以每次只展示一个child, 也可以多个同时展示. UIKit中的UINavigationController
,UITabBarController
,UISplitViewController
,UIPageViewController
都是这种类型, 它们多数是为了不同界面之间的导航服务的.
生命周期回调
Controller的回调中最常用的是:
loadView()
: 用来设置根view属性, add views等.viewDidLoad()
, 可以用来做一些初始化的工作, 比如加载数据, add和remove views, 设置constraints等.
其他的回调方法名字也非常直白:
- viewWillAppear(): view绘制之前.
- viewDidAppear(): view绘制出来了.
- viewWillDisappear(): view马上要消失了.
- viewDidDisappear(): 已经消失了.
ViewController的职责
ViewController即MVC(Model View Controller)模式中的Controller.
如何管理View和数据的分离和交互是开发者自己的职责.
在简单的demo里, 如果你愿意, 一个ViewController就可以写完所有代码.
和Android一样, 我们会尽量把逻辑从ViewController(Activity)中拆分出去, 写出更加职责分明并且容易被测试的代码.
会有一些流行的模式, 比如MVVM什么的, 这里不展开讲了.
Scene, Window, ViewController
每一个Window都有一个root view controller, 是window最开始的内容.
展示一个新的view controller将会改变窗口内容.
它们之间的关系如图:
总结
iOS中的View Controller作为MVC模式中的Controller, 可以类比Android中的Activity:
- view属性返回页面内容.
- 有一些生命周期回调.
- 有一些各种各样的pattern为了让它承担的职责尽量得少.
(其实后端代码提供API的第一层也叫Controller, 所以有没有可能, 最开始设计UIKit的人是一个之前写后端的?)
References
[Android开发学iOS系列] ViewController的更多相关文章
- [Android开发学iOS系列] iOS写UI的几种方式
[Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...
- [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
[Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...
- [Android开发学iOS系列] Auto Layout
[Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...
- [Android开发学iOS系列] 语言篇: Swift vs Kotlin
Swift vs Kotlin 这篇文章是想着帮助Android开发快速学习Swift编程语言用的. (因为这个文章的作者立场就是这样.) 我不想写一个非常长, 非常详尽的文章, 只是想写一个快速的版 ...
- [Android开发学iOS系列] 快速上手UIKit
快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...
- Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...
- android开发学习笔记系列(1)-android起航
前言 在学习安卓的过程中,我觉得非常有必要将自己所学的东西进行整理,因为每每当我知道我应该是如何去实现功能的时候,有许多细节问题我总是会遗漏,因此我也萌生了写一系列博客来描述自己学习的路线,让我的an ...
- android开发学习笔记系列(2)-android应用界面编程
前言 本篇博客将会简要介绍andriod开发过程中的一些界面元素和编程的实现,我将大家走进安卓的XML世界,当然可能会涉及到java代码,当然本文主要是介绍XML文件的界面布局. 那么我们的XML存在 ...
- android开发学习笔记系列(4)--android动态布局
前言 在做一个有关苏果APP的项目中,但是fuck的是,我完全使用相对布局之后及线性布局之后发现坑爹的事情了,屏幕不能适配,这是多大的痛,意味着,必须使用相应的代码实现动态布局!呵呵,不做项目不知道, ...
随机推荐
- Docker非root用户使用
Docker 用户管理 安装Docker后docker相关命令都需要加上sudo才能执行,这里为特定用户添加下权限 Docker群组 不过一般安好docker后该群组已创建 sudo groupadd ...
- vue项目导航菜单实现
vue项目导航菜单问题 目标:横向菜单点击跳转,颜色变换,刷新可保持状态 // 模板template中通过循环菜单列表生成,动态类名改变颜色 <li v-for="(item, ind ...
- 合并表格行---三层for循环遍历数据
合并表格行---三层for循环遍历数据 示例1 json <!DOCTYPE html> <html lang="zh_cn"> <head> ...
- && 和 ||粗解
可以这么理解 &&是来找假的,如果找到假就返回假,如果找不到,就返回最后一个真 ||是来找真的,如果找到真就返回真,如果找不到,就返回最后一个假 var speed = 12; var ...
- 还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_173 一般情况下,当你想为你的Python开发环境选择一个基础镜像时,大多数人都会选择Alpine,为什么?因为它太小了,仅仅只有 ...
- 云图说丨初识华为云微服务引擎CSE
摘要:微服务引擎(Cloud Service Engine,CSE),是用于微服务应用的云中间件,为用户提供注册发现.服务治理.配置管理等高性能和高韧性的企业级云服务能力 本文分享自华为云社区< ...
- 基于图像识别框架Airtest的Windows项目自动化测试实践
写在前面 上一篇分享了<基于Sikuli GUI图像识别框架的PC客户端自动化测试实践>,但sikuli看起来怎么都像是上个世纪的界面风格,且功能过于简陋.而同样基于图像识别框架的Airt ...
- SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)
此案例主要是针对光线投影法碰撞检测功能的示例,顺便做成了一个小游戏,很简单,但是,效果却很不错. 投篮小游戏 规则,点击投篮目标点,就会有一个球沿着相关抛物线,然后,判断是否进入篮子里,其实就是一个矩 ...
- 【原创】Python 极验滑块验证
本文仅供学习交流使用,如侵立删! 记一次 极验滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.seleniumwire 分析 最近在做的一个项目登录时会触发 ...
- 程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
谁说程序员不懂浪漫? 作为程序员,用自己的代码本事手搓一个技术感十足的惊喜,我觉得,这是不亚于车马慢时代手写信的古典主义浪漫. 那么,应该怎样创作出具有自我身份属性的浪漫惊喜呢? 玩法很多,今天给大家 ...