自學系列 | iOS Swift | 第二課:介面開發 (UIKit) Part 1

熟悉 UIKit Fundamentals — 逃不掉的 Delegate

Chloé
YiYi Network
6 min readApr 25, 2018

--

by Corinne Kutz on Unsplash

前言:為什麼會有「自學系列」

當我還是程式初學者時,覺得自學最麻煩的就是:那些課程大綱、專有名詞我根本看不懂。如果有個已經會的人直接跟我說要學什麼,給我一個 overview,就能省下很多時間。

關於 iOS App 自學系列我已經寫了兩篇,有興趣可以去看看。

這篇文章是 Udacity iOS App Nanodegree 第二課的導讀,透過做出這個影片中的 App,熟悉介面開發常見的幾個元件。

導讀:這堂課會學到什麼?

第二課連結在此,我們將學會底下幾個主題。

1. 重點觀念

  • Delegate

Delegate 對初學者而言是個逃不掉的魔咒,記得自己初學 Delegate 時,不懂為什麼要有這種東西,只會一個案例、一個案例照抄。三個月後大概可以不再參考案例,順順地自己寫出 Delegate,直到最近寫這篇文章,我才覺得有點理解它了。

先幫大家打個預防針:

有時候學東西是這樣:先照抄 ➙ 會自己寫 ➙ 練習很多很多次之後,終於理解為什麼要這樣寫。

Delegate 是代理人的意思,在上一篇有提過,它是一種寫程式的方法 (Design Pattern),用於當 A 想叫 B 做事情的時候。還記得 MVC 嗎?View(介面)負責呈現畫面給使用者、Controller 則是負責處理邏輯,例如 Controller 會根據一些邏輯,告訴 View 現在要變成什麼畫面。

所以,很多時候 View 會指派 Controller 為 Delegate (代理人),問 Controller 現在要如何呈現自己。

舉凡用來呈現多種資料的 UITableView、UICollectionView,用來呈現文字的 UITextView、UITextField,用來選擇日期、數字的 UIPickerView…等等,都會用到 Delegate。

被指定爲 Delegate 者,必須遵從某種 Protocol (協定),就像被國家指派爲法國大使的外交官,他出席活動的行為必須遵從某些規則。Protocol 就是這樣的東西,遵從 Protocol 的 Delegate 就會有要執行的 function。底下用 UITextField 當作例子。

  • UITextField

UITextField 用於輸入文字 (如左圖紅色框之處)。

在第二課的範例中(右圖),三個 TextField 的文字呈現都不同,表示這三個 TextField 是不同的代理人(Delegate):

  • 第一個 Delegate 可以把動物的單字變成表情符號 (e.g. cat 變成 🐱)
  • 第二個 Delegate 會根據單字改變句子的顏色 (e.g. red)
  • 第三個 Delegate 會算出句子的字數

這三個 Delegate 都遵從 UITextFieldDelegate 這個 Protocol,所以當我們輸入文字時,三個代理人就要執行該 Protocol 當中

func textField(UITextField, shouldChangeCharactersIn: NSRange, replacementString: String)

這個 function,差別只是 function 裡的邏輯要寫什麼,決定文字會怎麼變。就像外交官出席活動一定要發新聞稿,但新聞稿內容要寫什麼,則因人而異。

2. 資料呈現

  • UITableView / UICollectionView

仔細觀察的話,你會發現多數的 App 都用到 TableView 或 CollectionView。

TableView 就是一行一行排下來的,像 iPhone 內建的設定(左圖)、Line、Messenger、郵件、備忘錄、YouTube、Facebook…等等,CollectionView 則是一格一格的,像 instagram(右圖)、照片、旅行青蛙購買道具&放明信片的頁面…等等。

TableView 跟 CollectionView 都要用到 Delegate (所以 Delegate 真的逃不掉!),以 TableView 來說,就有 UITableViewDelegate、UITableViewDataSource 這兩個。UITableViewDelegate 負責處理使用者產生的行為,例如當使用者點選表格、編輯表格時,要怎麼回應 ; UITableViewDataSource 則處理資料庫與表格之間的關係,例如整個 TableView 要有幾行、第幾行要呈現什麼資料…等等。

接下來

因為 Delegate 寫得有點多,第二課的多頁畫面,及其他 UI 元件我把它放到 Part 2,可以點底下連結繼續看。

如果喜歡這樣的自學系列,請幫我拍拍手 👏另外,我把之前寫的程式學習相關文章集結在底下的列表,有閒來坐 🤗

--

--

Chloé
YiYi Network

📍Taipei, Taiwan 👩🏻‍💻 Software Developer