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 - 博客园相关推荐

  1. java 秒杀多线程_秒杀多线程系列 - 随笔分类 - Joyfulmath - 博客园

    随笔分类 - 秒杀多线程系列 秒杀多线程系列,该系列转载至CSDN MoreWindows: http://blog.csdn.net/morewindows/article/details/7392 ...

  2. php webview,Android:控件WebView显示网页 – tinyphp – 博客园

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

  3. 计算机属性的Java代码_java - 学计算机的人绝不认输 - 博客园

    一.指令元素 1.page指令 import session contentType buffer isTreadSafe info errorPage isErrorPage 2.include指令 ...

  4. android java代码加密,Android中AES256加密的实现 – Leo Chin – 博客园

    AES加密是我们在工作中常用到一种加密方式,并且在java中也已经实现好了其相应的接口. 但是Java自带的JDK默认最多实现128位及其以下的加密.如果使用java自带的api实现aes256将会报 ...

  5. [开发工具]借助dillinger.io,在博客园写markdown

    开始用博客园推荐的本地编辑器 [windowsLiveWriter]写博客,因为它对图片编辑实在友好,不像markdown需要把图片保存到本地再上传那么麻烦,直接截图->复制->粘贴即可. ...

  6. 刘永富的Office开发资源-告别vba.mahoupao.net-移居博客园

    各位读者朋友们,大家好! 我是刘永富 由于以前的论坛服务器经常出问题,不便于大家下载配套资源,所以从即日起,我会在博客园发布相关话题,希望大家持续关注我. 转载于:https://www.cnblog ...

  7. nodejs爬虫与python爬虫_【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

    写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园.搞不好编辑看到了就把我的账号给封了:). 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 ph ...

  8. 我的Android进阶之旅:经典的大牛博客推荐

    Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN ...

  9. Android进阶之旅:经典的大牛博客推荐

    Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN ...

  10. React Native开发的博客园App

    利用React Native花了大概3周的业余时间开发出这一款较完善博客园App,目前只是测试版本(v1.0.0),不过大致的功能都已经完善,如果大家有兴趣有问题可以下面反馈 安卓: 请前往 酷安ht ...

最新文章

  1. 2021年大数据Spark(五):大环境搭建本地模式 Local
  2. Debussy的安装
  3. Pycharm 和 vscode 多光标、折叠代码和代码格式化快捷键
  4. spring 两次进入拦截器_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
  5. 制作简易的LED闪烁测试工具
  6. 深度学习DL蒙特卡洛法平衡态分子动力学模拟并计算苯酚键值
  7. 笔记 - AliCloud 云数据库 简介
  8. 1206封装电容在物料可靠性设计比较低
  9. B00005 函数atoi()(去空格,带符号)
  10. gitee创建ssh公钥
  11. 本地项目部署到服务器 启动 报错 数据表不存原因 解决
  12. 3. vi 简介(3)
  13. mysql主从复制周期_Mysql主从复制
  14. mfc最详细入门教程
  15. html登录界面QQ微信图标,discuz修改QQ登录图标和微信登录图标的方法
  16. 用计算机打出歌词,Overture软件中如何输入歌词?
  17. 异常值检验的一些方法
  18. 摩天轮社区_摩天轮:基于真实地理位置游戏
  19. (兼职月赚两万?)程序员如何接私活? 如何让自己的知识变现?
  20. 食品加工企业自营商城小程序开发,帮助企业增加销售渠道,提高销量

热门文章

  1. unbalanced enable irq
  2. Flask 中 AssertionError: View function mapping is overwriting an existing endpoint function: decorate
  3. c语言intmain作用,c语言intmain()是什么意思
  4. 服务器时间修改连接超时时间设置,云服务器连接超时时间设置
  5. python 列表解析式
  6. Linux共享内存使用常见陷阱与分析
  7. word对象模型概述
  8. 吴恩达-deep learning 02.改善深层神经网络:超参数调试、正则化以及优化Week1
  9. Sliver RecyclerView 功能最强大、最好用的适配器
  10. php文字超出省略号,文字超过规定行数时自动生成省略号