[Android開發學iOS系列] ViewController

来源:https://www.cnblogs.com/mengdd/archive/2022/10/11/iOS-ViewController.html
-Advertisement-
Play Games

iOS ViewController 寫UIKit的代碼, ViewController是離不開的. 本文試圖講講它的基本知識, 不是很深入且有點雜亂, 供初級選手和跨技術棧同學參考. What is a View Controller iOS中的View Controller非常像Android中 ...


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將會改變視窗內容.

它們之間的關係如圖:
ViewController and Window

圖片來源

總結

iOS中的View Controller作為MVC模式中的Controller, 可以類比Android中的Activity:

  • view屬性返回頁面內容.
  • 有一些生命周期回調.
  • 有一些各種各樣的pattern為了讓它承擔的職責儘量得少.

(其實後端代碼提供API的第一層也叫Controller, 所以有沒有可能, 最開始設計UIKit的人是一個之前寫後端的?)

References

作者: 聖騎士Wind
出處: 博客園: 聖騎士Wind
Github: https://github.com/mengdd
微信公眾號: 聖騎士Wind
微信公眾號: 聖騎士Wind
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分離部署LNMP 環境說明: | 系統 | 主機名 | IP | 服務 | | | | | | | centos8 | nginx | 192.168.111.141 | nginx | | centos8 | mysql | 192.168.111.142 | mysql | | centos8 ...
  • 摘要:我們利用華為雲IoTDA平臺構建一個智能電梯運行狀態檢測模型,模擬一下智能電梯檢測器的工作原理。 本文分享自華為雲社區《太棒了,5分鐘構建IoT智能電梯檢測器模型》,作者:清雨小竹。 什麼是物模型? 物模型是現實中的設備(如感測器、車載裝置、樓宇、工廠等)在雲端的數字化表示,用於描述了該設備是 ...
  • 軟體包: 開源軟體剛開始只提供打包好的源代碼文件(例如:.tar.gz),用戶需要自己使用編譯器編譯後才能使用。 Debian誕生時,管理工具dpkg也就應運而生,可用來管理deb尾碼的"包"文件 後面後Red Hat才開發自己的rpm包管理系統 主流軟體包管理器: redhat:RPM Packa ...
  • 安裝Httpd服務 版本說明: CentOS 7 以上,預設系統是httpd 2.4,CentOS 6 版預設為httpd 2.2 Ubuntu 18.04 預設 Apache/2.4.29 範例:CentOS 8 安裝httpd [root@CentOS8 ~]# yum info httpd B ...
  • 一、CentOS 7.9 安裝 fastdfs 地址 https://github.com/happyfish100 http://nginx.org/en/download.html wget 下載 wget https://github.com/happyfish100/libfastcommo ...
  • 習題 1.Homework01 (1) D -- 沒有在別名上加引號(ps:別名的as可以省略) (2) B -- 判斷null或非空不能用不等於號 (3) C 2.Homework02 寫出查看dept表和emp表的結構的sql語句 使用簡單查詢語句完成 顯示所有部門名稱 顯示所有雇員名及其全年收 ...
  • Dragonboat Log Replication 代碼走讀 Dragonboat 是一個開源的高性能Go實現的Raft共識協議實現. 具有良好的性能和久經社區檢驗的魯棒性, 機遇巧合, 接觸到. 因此決定結合Raft博士論文走讀其源碼. 今天帶來Raft中三大核心之一的日誌複製Log Repli ...
  • StoneDB 的主從切換既可以手動切換,也可以自動切換,自動切換通常需要使用第三方中間件。本文介紹的是較為常用的中間件 Replication Manager,當 master 發生宕機時,可自動切換至 slave,保證業務正常運行,故障節點恢復後再加入主從。 伺服器配置說明 | IP | Mem ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...