[Android开发学iOS系列] ViewController - 圣骑士wind - 博客园
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
- ViewController Programming Guide for iOS
- Managing content in your app’s windows
- UIViewController
[Android开发学iOS系列] ViewController - 圣骑士wind - 博客园相关推荐
- java 秒杀多线程_秒杀多线程系列 - 随笔分类 - Joyfulmath - 博客园
随笔分类 - 秒杀多线程系列 秒杀多线程系列,该系列转载至CSDN MoreWindows: http://blog.csdn.net/morewindows/article/details/7392 ...
- php webview,Android:控件WebView显示网页 – tinyphp – 博客园
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...
- 计算机属性的Java代码_java - 学计算机的人绝不认输 - 博客园
一.指令元素 1.page指令 import session contentType buffer isTreadSafe info errorPage isErrorPage 2.include指令 ...
- android java代码加密,Android中AES256加密的实现 – Leo Chin – 博客园
AES加密是我们在工作中常用到一种加密方式,并且在java中也已经实现好了其相应的接口. 但是Java自带的JDK默认最多实现128位及其以下的加密.如果使用java自带的api实现aes256将会报 ...
- [开发工具]借助dillinger.io,在博客园写markdown
开始用博客园推荐的本地编辑器 [windowsLiveWriter]写博客,因为它对图片编辑实在友好,不像markdown需要把图片保存到本地再上传那么麻烦,直接截图->复制->粘贴即可. ...
- 刘永富的Office开发资源-告别vba.mahoupao.net-移居博客园
各位读者朋友们,大家好! 我是刘永富 由于以前的论坛服务器经常出问题,不便于大家下载配套资源,所以从即日起,我会在博客园发布相关话题,希望大家持续关注我. 转载于:https://www.cnblog ...
- nodejs爬虫与python爬虫_【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」
写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园.搞不好编辑看到了就把我的账号给封了:). 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 ph ...
- 我的Android进阶之旅:经典的大牛博客推荐
Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN ...
- Android进阶之旅:经典的大牛博客推荐
Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN ...
- React Native开发的博客园App
利用React Native花了大概3周的业余时间开发出这一款较完善博客园App,目前只是测试版本(v1.0.0),不过大致的功能都已经完善,如果大家有兴趣有问题可以下面反馈 安卓: 请前往 酷安ht ...
最新文章
- 2021年大数据Spark(五):大环境搭建本地模式 Local
- Debussy的安装
- Pycharm 和 vscode 多光标、折叠代码和代码格式化快捷键
- spring 两次进入拦截器_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
- 制作简易的LED闪烁测试工具
- 深度学习DL蒙特卡洛法平衡态分子动力学模拟并计算苯酚键值
- 笔记 - AliCloud 云数据库 简介
- 1206封装电容在物料可靠性设计比较低
- B00005 函数atoi()(去空格,带符号)
- gitee创建ssh公钥
- 本地项目部署到服务器 启动 报错 数据表不存原因 解决
- 3. vi 简介(3)
- mysql主从复制周期_Mysql主从复制
- mfc最详细入门教程
- html登录界面QQ微信图标,discuz修改QQ登录图标和微信登录图标的方法
- 用计算机打出歌词,Overture软件中如何输入歌词?
- 异常值检验的一些方法
- 摩天轮社区_摩天轮:基于真实地理位置游戏
- (兼职月赚两万?)程序员如何接私活? 如何让自己的知识变现?
- 食品加工企业自营商城小程序开发,帮助企业增加销售渠道,提高销量
热门文章
- unbalanced enable irq
- Flask 中 AssertionError: View function mapping is overwriting an existing endpoint function: decorate
- c语言intmain作用,c语言intmain()是什么意思
- 服务器时间修改连接超时时间设置,云服务器连接超时时间设置
- python 列表解析式
- Linux共享内存使用常见陷阱与分析
- word对象模型概述
- 吴恩达-deep learning 02.改善深层神经网络:超参数调试、正则化以及优化Week1
- Sliver RecyclerView 功能最强大、最好用的适配器
- php文字超出省略号,文字超过规定行数时自动生成省略号