簡易通訊錄App

練習使用TableView建立通訊錄,並且可以新增(使用UserDefaults儲存功能)、修改、刪除

▼自訂struct

▼建立TableViewCell.swift,並拉ImageView、Label的Outlet(欲顯示在頁面的元件)

▼建立TableViewController.swift,並override兩個function

addressBooks.count為自訂array的總數量

withIdentifier:需改為自訂的TableViewCell.swift名稱
indexPath.row:取得欄位
利用cell.XXX去取得TableViewCell的元件

▼在ViewDidLoad下讀取userDefaults裡的資料,並攔截Notification

userDefaults.array:讀取array資料
forKey:讀取key的value(userDefaults是key、value型式)
as? [[String:Any]]:轉成dictionary,Key型態為String,Value型態為Any
compactMap:把array裡的資料全部讀出來
addObserver:增加Notification攔截器(即監聽器)
selector:接收到通知後,欲執行的func
name:攔截的通知名稱

▼攔截Notification後執行的func

@objc為Objective-C的意思

Notification.userInfo:取得攔截的通知資料
userInfo[key]:因userInfo是Dictionary,所以取資料需給key
insert:第一個參數為欲增加的資料,第二個參數為要增加在array的哪裡
tableView.insertRows:第一個參數為要增加在哪一個欄位,第二個參數為增加的動畫要哪種形式
updateUserDefaults():為自定義的func

▼自訂的func updateUserDefaults()

.map:讀取array全部的資料
userDefaults.set:儲存資料到userDefaults,第一個參數為欲儲存的資料,第二個參數為Key

▼傳資料到下一個TableViewController,需override func prepare

在傳資料前要先建立好第二個TableViewController

segue.destination:取得segue目的地(第二個TableViewController)
tableView.indexPathForSelectedRow.row:取得選取的欄位

▼刪除TableView欄位的資料

.remove:移除陣列的資料
tableView.deleteRows:刪除TableView欄位的資料,第一個參數為哪一欄,第二個參數為刪除的動畫

▼第二個TableViewController裡的ViewDidLoad

讀取array的資料,並設定對應的元件

▼第二個TableViewController建立DONE的Action

view.endEditing:收鍵盤
dissmiss:回到前一頁
.post:發送廣播
userInfo:[key:value]:第一個參數為設定key的名稱,第二個參數為存得值
performSegue:換頁到名稱為goBack的Segue指向的目的地

▼寫在第一個TableViewController的goBack func

執行perFormSegue後,會執行的func(需從第二個TableViewController(黃色按鈕)拉線到Exit(紅色按鈕))

segue.source:segue的來源
tableView.reloadDate():刷新資料

▼建立Gesture在ImageView的欄位,並用alert去改變imageName

拉Gesture的Action

UIAlertController:建立Alert,第一個參數為標題名稱,第二個參數為訊息內容,第三個參數為Alert的樣式
UIAlertAction:建立Alert的按鈕,第一個參數為標題名稱,第二個參數為按鈕樣式,最後一個參數handler為按下按鈕後要執行的動作,是一個closure
addAction:將按鈕加到Alert裡
self.present:用來顯示Alert,第一個參數為要顯示的Alert,第二個參數為是否要有動畫,第三個參數是執行後的動作

▼Alert參考網址:

▼map和compactMap的參考網址:

▼Github 網址:

--

--